【问题标题】:How can I apply GZIP content-encoding to an HTTP file upload multipart/form-data POST如何将 GZIP 内容编码应用于 HTTP 文件上传 multipart/form-data POST
【发布时间】:2015-03-28 03:55:16
【问题描述】:

我正在编写一个自定义 Java 控制台应用程序,用于将非二进制文件上传到我拥有的 Java 应用程序服务器。它正在执行 HTTPS 多部分/表单数据 POST,并将文件发送到 REST api。虽然它适用于小文件,但我想将 GZIP 内容编码应用于发布请求,以便更有效地处理大文件。

是否有一个 JAVA 库可以用来压缩帖子,包括文件内容,然后在另一端解压缩?我想避免必须先压缩文件,而宁愿依靠 HTTP 编码来处理它。

【问题讨论】:

    标签: java http file-upload console-application multipartform-data


    【解决方案1】:

    为了迂腐,您不会 gzip 整个 POST。您只需 Gzip 内容数据,然后在您的 POST 中将 Content-Encoding 设置为 gzip。

    你还没有发布你的代码(得到它???),所以需要做一些假设来举个例子:

    import java.util.zip.GZIPOutputStream;
    import java.io.ByteArrayOutputStream;
    ...
    
    final String yourData = "butts";
    final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    final GZipOutputStream gzipOutputStream;
    
    try {
        gzipOutputStream = new GZipOutputStream(byteArrayOutputStream);
        gzipOutputStream.write(yourData.getBytes("utf-8"));
    } finally {
        gzipOutputStream.close();
    }
    
    final byte[] gzippedButts = byteArrayOutputStream.toByteArray();
    
    /*
     * Now use the gzipped data as the data in your POST, and also
     * make sure to set the Content-Encoding of your HTTP POST to "gzip".
     */
    

    编辑:再次阅读这个问题,听起来 OP 想要一个库来抽象所有的处理,并且只是在引擎盖下 Gzip 一个请求体。不幸的是,我不知道有任何这样的库。

    【讨论】:

    • ByteArrayOutputStream 不是必需的。这只是浪费时间和空间。只需将GZipOutputStream 直接连接到真实的输出流即可。
    • 我们不知道OP的“真实输出流”是什么。所以我只是在示例中替换了一个 BAOS。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    • 2013-11-26
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 2018-08-03
    相关资源
    最近更新 更多