Example usage for io.netty.handler.codec.http HttpHeaderNames CONTENT_TRANSFER_ENCODING

List of usage examples for io.netty.handler.codec.http HttpHeaderNames CONTENT_TRANSFER_ENCODING

Introduction

In this page you can find the example usage for io.netty.handler.codec.http HttpHeaderNames CONTENT_TRANSFER_ENCODING.

Prototype

AsciiString CONTENT_TRANSFER_ENCODING

To view the source code for io.netty.handler.codec.http HttpHeaderNames CONTENT_TRANSFER_ENCODING.

Click Source Link

Document

"content-transfer-encoding"

Usage

From source file:org.ballerinalang.stdlib.mime.Util.java

License:Open Source License

/**
 * Get a text body part from a given text content and content transfer encoding.
 *
 * @param contentTransferEncoding Content transfer encoding value
 * @param message                 String that needs to be written to temp file
 * @param result                  Result of ballerina file compilation
 * @return A ballerina struct that represent a body part
 *///from  w ww .jav a 2s  . c  o  m
public static BMap<String, BValue> getTextFilePartWithEncoding(String contentTransferEncoding, String message,
        CompileResult result) {
    try {
        File file = getTemporaryFile("test", ".txt", message);
        BMap<String, BValue> bodyPart = getEntityStruct(result);
        bodyPart.addNativeData(ENTITY_BYTE_CHANNEL,
                EntityBodyHandler.getByteChannelForTempFile(file.getAbsolutePath()));
        MimeUtil.setContentType(getMediaTypeStruct(result), bodyPart, TEXT_PLAIN);
        HeaderUtil.setHeaderToEntity(bodyPart, HttpHeaderNames.CONTENT_TRANSFER_ENCODING.toString(),
                contentTransferEncoding);
        return bodyPart;
    } catch (IOException e) {
        LOG.error("Error occurred while creating a temp file for json file part in getTextFilePart",
                e.getMessage());
    }
    return null;
}

From source file:org.ballerinalang.stdlib.utils.MultipartUtils.java

License:Open Source License

/**
 * Encode a given body part and add it to multipart request encoder.
 *
 * @param nettyEncoder Helps encode multipart/form-data
 * @param httpRequest  Represent top level http request that should hold multiparts
 * @param bodyPart     Represent a ballerina body part
 * @throws HttpPostRequestEncoder.ErrorDataEncoderException when an error occurs while encoding
 *//* w  ww . ja va  2 s.  c o  m*/
private static void encodeBodyPart(HttpPostRequestEncoder nettyEncoder, HttpRequest httpRequest,
        BMap<String, BValue> bodyPart) throws HttpPostRequestEncoder.ErrorDataEncoderException {
    try {
        InterfaceHttpData encodedData;
        Channel byteChannel = EntityBodyHandler.getByteChannel(bodyPart);
        FileUploadContentHolder contentHolder = new FileUploadContentHolder();
        contentHolder.setRequest(httpRequest);
        contentHolder.setBodyPartName(getBodyPartName(bodyPart));
        contentHolder.setFileName(TEMP_FILE_NAME + TEMP_FILE_EXTENSION);
        contentHolder.setContentType(MimeUtil.getBaseType(bodyPart));
        contentHolder.setBodyPartFormat(MimeConstants.BodyPartForm.INPUTSTREAM);
        String contentTransferHeaderValue = HeaderUtil.getHeaderValue(bodyPart,
                HttpHeaderNames.CONTENT_TRANSFER_ENCODING.toString());
        if (contentTransferHeaderValue != null) {
            contentHolder.setContentTransferEncoding(contentTransferHeaderValue);
        }
        if (byteChannel != null) {
            contentHolder.setContentStream(byteChannel.getInputStream());
            encodedData = getFileUpload(contentHolder);
            if (encodedData != null) {
                nettyEncoder.addBodyHttpData(encodedData);
            }
        }
    } catch (IOException e) {
        LOG.error("Error occurred while encoding body part in ", e.getMessage());
    }
}

From source file:org.ballerinalang.test.mime.Util.java

License:Open Source License

/**
 * Get a text body part from a given text content and content transfer encoding.
 *
 * @param contentTransferEncoding Content transfer encoding value
 * @param message                 String that needs to be written to temp file
 * @param result                  Result of ballerina file compilation
 * @return A ballerina struct that represent a body part
 *//*from   w w  w. j  a va  2 s .  c om*/
static BMap<String, BValue> getTextFilePartWithEncoding(String contentTransferEncoding, String message,
        CompileResult result) {
    try {
        File file = File.createTempFile("test", ".txt");
        file.deleteOnExit();
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file));
        bufferedWriter.write(message);
        bufferedWriter.close();
        BMap<String, BValue> bodyPart = getEntityStruct(result);
        bodyPart.addNativeData(ENTITY_BYTE_CHANNEL,
                EntityBodyHandler.getByteChannelForTempFile(file.getAbsolutePath()));
        MimeUtil.setContentType(getMediaTypeStruct(result), bodyPart, TEXT_PLAIN);
        HeaderUtil.setHeaderToEntity(bodyPart, HttpHeaderNames.CONTENT_TRANSFER_ENCODING.toString(),
                contentTransferEncoding);
        return bodyPart;
    } catch (IOException e) {
        log.error("Error occurred while creating a temp file for json file part in getTextFilePart",
                e.getMessage());
    }
    return null;
}

From source file:org.ballerinalang.test.mime.Util.java

License:Open Source License

/**
 * Encode a given body part and add it to multipart request encoder.
 *
 * @param nettyEncoder Helps encode multipart/form-data
 * @param httpRequest  Represent top level http request that should hold multiparts
 * @param bodyPart     Represent a ballerina body part
 * @throws HttpPostRequestEncoder.ErrorDataEncoderException when an error occurs while encoding
 */// w w  w .  j  av a  2  s .c  o  m
private static void encodeBodyPart(HttpPostRequestEncoder nettyEncoder, HttpRequest httpRequest,
        BMap<String, BValue> bodyPart) throws HttpPostRequestEncoder.ErrorDataEncoderException {
    try {
        InterfaceHttpData encodedData;
        Channel byteChannel = EntityBodyHandler.getByteChannel(bodyPart);
        FileUploadContentHolder contentHolder = new FileUploadContentHolder();
        contentHolder.setRequest(httpRequest);
        contentHolder.setBodyPartName(getBodyPartName(bodyPart));
        contentHolder.setFileName(TEMP_FILE_NAME + TEMP_FILE_EXTENSION);
        contentHolder.setContentType(MimeUtil.getBaseType(bodyPart));
        contentHolder.setBodyPartFormat(MimeConstants.BodyPartForm.INPUTSTREAM);
        String contentTransferHeaderValue = HeaderUtil.getHeaderValue(bodyPart,
                HttpHeaderNames.CONTENT_TRANSFER_ENCODING.toString());
        if (contentTransferHeaderValue != null) {
            contentHolder.setContentTransferEncoding(contentTransferHeaderValue);
        }
        if (byteChannel != null) {
            contentHolder.setContentStream(byteChannel.getInputStream());
            encodedData = getFileUpload(contentHolder);
            if (encodedData != null) {
                nettyEncoder.addBodyHttpData(encodedData);
            }
        }
    } catch (IOException e) {
        log.error("Error occurred while encoding body part in ", e.getMessage());
    }
}

From source file:reactor.ipc.netty.http.client.HttpClientFormEncoder.java

License:Open Source License

/**
 * Add the InterfaceHttpData to the Body list
 *
 * @throws NullPointerException      for data
 * @throws ErrorDataEncoderException if the encoding is in error or if the finalize
 *                                   were already done
 *//* w w w  .  j av a2  s  .c om*/
void addBodyHttpData(InterfaceHttpData data) throws ErrorDataEncoderException {
    if (headerFinalized) {
        throw new ErrorDataEncoderException("Cannot add value once finalized");
    }
    if (data == null) {
        throw new NullPointerException("data");
    }
    bodyListDatas.add(data);
    if (!isMultipart) {
        if (data instanceof Attribute) {
            Attribute attribute = (Attribute) data;
            try {
                // name=value& with encoded name and attribute
                String key = encodeAttribute(attribute.getName(), charset);
                String value = encodeAttribute(attribute.getValue(), charset);
                Attribute newattribute = factory.createAttribute(request, key, value);
                multipartHttpDatas.add(newattribute);
                globalBodySize += newattribute.getName().length() + 1 + newattribute.length() + 1;
            } catch (IOException e) {
                throw new ErrorDataEncoderException(e);
            }
        } else if (data instanceof FileUpload) {
            // since not Multipart, only name=filename => Attribute
            FileUpload fileUpload = (FileUpload) data;
            // name=filename& with encoded name and filename
            String key = encodeAttribute(fileUpload.getName(), charset);
            String value = encodeAttribute(fileUpload.getFilename(), charset);
            Attribute newattribute = factory.createAttribute(request, key, value);
            multipartHttpDatas.add(newattribute);
            globalBodySize += newattribute.getName().length() + 1 + newattribute.length() + 1;
        }
        return;
    }
    /*
     * Logic:
       * if not Attribute:
       *      add Data to body list
       *      if (duringMixedMode)
       *          add endmixedmultipart delimiter
       *          currentFileUpload = null
       *          duringMixedMode = false;
       *      add multipart delimiter, multipart body header and Data to multipart list
       *      reset currentFileUpload, duringMixedMode
       * if FileUpload: take care of multiple file for one field => mixed mode
       *      if (duringMixeMode)
       *          if (currentFileUpload.name == data.name)
       *              add mixedmultipart delimiter, mixedmultipart body header and Data to multipart list
       *          else
       *              add endmixedmultipart delimiter, multipart body header and Data to multipart list
       *              currentFileUpload = data
       *              duringMixedMode = false;
       *      else
       *          if (currentFileUpload.name == data.name)
       *              change multipart body header of previous file into multipart list to
       *                      mixedmultipart start, mixedmultipart body header
       *              add mixedmultipart delimiter, mixedmultipart body header and Data to multipart list
       *              duringMixedMode = true
       *          else
       *              add multipart delimiter, multipart body header and Data to multipart list
       *              currentFileUpload = data
       *              duringMixedMode = false;
       * Do not add last delimiter! Could be:
       * if duringmixedmode: endmixedmultipart + endmultipart
       * else only endmultipart
       */
    if (data instanceof Attribute) {
        if (duringMixedMode) {
            InternalAttribute internal = new InternalAttribute(charset);
            internal.addValue("\r\n--" + multipartMixedBoundary + "--");
            multipartHttpDatas.add(internal);
            multipartMixedBoundary = null;
            currentFileUpload = null;
            duringMixedMode = false;
        }
        InternalAttribute internal = new InternalAttribute(charset);
        if (!multipartHttpDatas.isEmpty()) {
            // previously a data field so CRLF
            internal.addValue("\r\n");
        }
        internal.addValue("--" + multipartDataBoundary + "\r\n");
        // content-disposition: form-data; name="field1"
        Attribute attribute = (Attribute) data;
        internal.addValue(HttpHeaderNames.CONTENT_DISPOSITION + ": " + HttpHeaderValues.FORM_DATA + "; "
                + HttpHeaderValues.NAME + "=\"" + attribute.getName() + "\"\r\n");
        // Add Content-Length: xxx
        internal.addValue(HttpHeaderNames.CONTENT_LENGTH + ": " + attribute.length() + "\r\n");
        Charset localcharset = attribute.getCharset();
        if (localcharset != null) {
            // Content-Type: text/plain; charset=charset
            internal.addValue(HttpHeaderNames.CONTENT_TYPE + ": " + DEFAULT_TEXT_CONTENT_TYPE + "; "
                    + HttpHeaderValues.CHARSET + '=' + localcharset.name() + "\r\n");
        }
        // CRLF between body header and data
        internal.addValue("\r\n");
        multipartHttpDatas.add(internal);
        multipartHttpDatas.add(data);
        globalBodySize += attribute.length() + internal.size();
    } else if (data instanceof FileUpload) {
        FileUpload fileUpload = (FileUpload) data;
        InternalAttribute internal = new InternalAttribute(charset);
        if (!multipartHttpDatas.isEmpty()) {
            // previously a data field so CRLF
            internal.addValue("\r\n");
        }
        boolean localMixed;
        if (duringMixedMode) {
            if (currentFileUpload != null && currentFileUpload.getName().equals(fileUpload.getName())) {
                // continue a mixed mode

                localMixed = true;
            } else {
                // end a mixed mode

                // add endmixedmultipart delimiter, multipart body header
                // and
                // Data to multipart list
                internal.addValue("--" + multipartMixedBoundary + "--");
                multipartHttpDatas.add(internal);
                multipartMixedBoundary = null;
                // start a new one (could be replaced if mixed start again
                // from here
                internal = new InternalAttribute(charset);
                internal.addValue("\r\n");
                localMixed = false;
                // new currentFileUpload and no more in Mixed mode
                currentFileUpload = fileUpload;
                duringMixedMode = false;
            }
        } else {
            if (encoderMode != EncoderMode.HTML5 && currentFileUpload != null
                    && currentFileUpload.getName().equals(fileUpload.getName())) {
                // create a new mixed mode (from previous file)

                // change multipart body header of previous file into
                // multipart list to
                // mixedmultipart start, mixedmultipart body header

                // change Internal (size()-2 position in multipartHttpDatas)
                // from (line starting with *)
                // --AaB03x
                // * Content-Disposition: form-data; name="files";
                // filename="file1.txt"
                // Content-Type: text/plain
                // to (lines starting with *)
                // --AaB03x
                // * Content-Disposition: form-data; name="files"
                // * Content-Type: multipart/mixed; boundary=BbC04y
                // *
                // * --BbC04y
                // * Content-Disposition: attachment; filename="file1.txt"
                // Content-Type: text/plain
                initMixedMultipart();
                InternalAttribute pastAttribute = (InternalAttribute) multipartHttpDatas
                        .get(multipartHttpDatas.size() - 2);
                // remove past size
                globalBodySize -= pastAttribute.size();
                StringBuilder replacement = new StringBuilder(
                        139 + multipartDataBoundary.length() + multipartMixedBoundary.length() * 2
                                + fileUpload.getFilename().length() + fileUpload.getName().length())

                                        .append("--").append(multipartDataBoundary).append("\r\n")

                                        .append(HttpHeaderNames.CONTENT_DISPOSITION).append(": ")
                                        .append(HttpHeaderValues.FORM_DATA).append("; ")
                                        .append(HttpHeaderValues.NAME).append("=\"")
                                        .append(fileUpload.getName()).append("\"\r\n")

                                        .append(HttpHeaderNames.CONTENT_TYPE).append(": ")
                                        .append(HttpHeaderValues.MULTIPART_MIXED).append("; ")
                                        .append(HttpHeaderValues.BOUNDARY).append('=')
                                        .append(multipartMixedBoundary).append("\r\n\r\n")

                                        .append("--").append(multipartMixedBoundary).append("\r\n")

                                        .append(HttpHeaderNames.CONTENT_DISPOSITION).append(": ")
                                        .append(HttpHeaderValues.ATTACHMENT).append("; ");

                if (!fileUpload.getFilename().isEmpty()) {
                    replacement.append(HttpHeaderValues.FILENAME).append("=\"")
                            .append(fileUpload.getFilename());
                }

                replacement.append("\"\r\n");

                pastAttribute.setValue(replacement.toString(), 1);
                pastAttribute.setValue("", 2);

                // update past size
                globalBodySize += pastAttribute.size();

                // now continue
                // add mixedmultipart delimiter, mixedmultipart body header
                // and
                // Data to multipart list
                localMixed = true;
                duringMixedMode = true;
            } else {
                // a simple new multipart
                // add multipart delimiter, multipart body header and Data
                // to multipart list
                localMixed = false;
                currentFileUpload = fileUpload;
                duringMixedMode = false;
            }
        }

        if (localMixed) {
            // add mixedmultipart delimiter, mixedmultipart body header and
            // Data to multipart list
            internal.addValue("--" + multipartMixedBoundary + "\r\n");
            // Content-Disposition: attachment; filename="file1.txt"
            if (!fileUpload.getFilename().isEmpty()) {
                internal.addValue(HttpHeaderNames.CONTENT_DISPOSITION + ": " + HttpHeaderValues.ATTACHMENT
                        + "; " + HttpHeaderValues.FILENAME + "=\"" + fileUpload.getFilename() + "\"\r\n");
            } else {
                internal.addValue(
                        HttpHeaderNames.CONTENT_DISPOSITION + ": " + HttpHeaderValues.ATTACHMENT + ";\r\n");
            }
        } else {
            internal.addValue("--" + multipartDataBoundary + "\r\n");
            // Content-Disposition: form-data; name="files";
            // filename="file1.txt"
            if (!fileUpload.getFilename().isEmpty()) {
                internal.addValue(HttpHeaderNames.CONTENT_DISPOSITION + ": " + HttpHeaderValues.FORM_DATA + "; "
                        + HttpHeaderValues.NAME + "=\"" + fileUpload.getName() + "\"; "
                        + HttpHeaderValues.FILENAME + "=\"" + fileUpload.getFilename() + "\"\r\n");
            } else {
                internal.addValue(HttpHeaderNames.CONTENT_DISPOSITION + ": " + HttpHeaderValues.FORM_DATA + "; "
                        + HttpHeaderValues.NAME + "=\"" + fileUpload.getName() + "\";\r\n");
            }
        }
        // Add Content-Length: xxx
        internal.addValue(HttpHeaderNames.CONTENT_LENGTH + ": " + fileUpload.length() + "\r\n");
        // Content-Type: image/gif
        // Content-Type: text/plain; charset=ISO-8859-1
        // Content-Transfer-Encoding: binary
        internal.addValue(HttpHeaderNames.CONTENT_TYPE + ": " + fileUpload.getContentType());
        String contentTransferEncoding = fileUpload.getContentTransferEncoding();
        if (contentTransferEncoding != null && contentTransferEncoding.equals(DEFAULT_TRANSFER_ENCODING)) {
            internal.addValue("\r\n" + HttpHeaderNames.CONTENT_TRANSFER_ENCODING + ": "
                    + DEFAULT_BINARY_CONTENT_TYPE + "\r\n\r\n");
        } else if (fileUpload.getCharset() != null) {
            internal.addValue(
                    "; " + HttpHeaderValues.CHARSET + '=' + fileUpload.getCharset().name() + "\r\n\r\n");
        } else {
            internal.addValue("\r\n\r\n");
        }
        multipartHttpDatas.add(internal);
        multipartHttpDatas.add(data);
        globalBodySize += fileUpload.length() + internal.size();
    }
}