首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ZipOutputStream到网络

ZipOutputStream到网络
EN

Stack Overflow用户
提问于 2017-10-26 12:20:39
回答 1查看 546关注 0票数 2

我想通过网络读取多个数据流的能力,并写入一个文件到网络组合所有这些多个文件。

因为文件可能非常大,所以我不想做任何本地IO文件操作,而是对数据流进行操作。从网络中读取流,将流作为zip写入网络。

我正在尝试下面的示例代码,但我没有看到远程主机上正在写入任何文件。如果我使用FileInputStream,那么写入本地磁盘文件就可以了,而不是通过网络写入。

我在写入网络时遗漏了什么?

代码语言:javascript
复制
   InputStream input = new URL("http://www.cacr.caltech.edu/projects/danse/talks/kickoff/07-Butler/SANS_DANSEkickoffAug06.pdf").openStream();



    URL url = new URL("http://posttestserver.com/post.php?dir=ziptest");
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setRequestMethod("POST");
    connection.setDoOutput(true);
    connection.setDoInput(true);

    ZipOutputStream zipOutputStream = new ZipOutputStream(connection.getOutputStream());



   zipOutputStream.putNextEntry(new ZipEntry("1.pdf"));

    byte[] buffer = new byte[0xFFFF];



    for (int len; (len = input.read(buffer)) != -1;) {
        zipOutputStream.write(buffer, 0, len);
    }


    zipOutputStream.putNextEntry(new ZipEntry("2.pdf"));

    InputStream input1 = new URL("http://www.pdf995.com/samples/pdf.pdf").openStream();

    for (int len; (len = input1.read(buffer)) != -1;) {
        zipOutputStream.write(buffer, 0, len);
    }



    zipOutputStream.close();

    int responseCode = connection.getResponseCode();
    System.out.println("HTTP response code="+responseCode);

    connection.disconnect();
EN

回答 1

Stack Overflow用户

发布于 2017-10-26 13:30:46

你没有做任何输入,所以实际上什么也没发生。您至少需要获取HTTP响应代码:

代码语言:javascript
复制
int responseCode = connection.getResponseCode();
System.out.println("HTTP response code="+responseCode);

更好的做法是,根据需要读取输入或错误流,然后关闭它。

编辑你有没有考虑过检查这些文件?下面是我刚刚创建的一个:

代码语言:javascript
复制
Time: Thu, 26 Oct 17 05:36:04 +0000
Source ip: 107.23.92.82

Headers (Some may be inserted by server)
HTTP_ACCEPT_LANGUAGE = en
HTTP_HOST = posttestserver.com
HTTP_CONNECTION = Keep-Alive
HTTP_USER_AGENT = Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2b5) Gecko/20091204 Firefox/3.6b5
HTTP_ACCEPT_ENCODING = gzip,deflate
REMOTE_ADDR = 107.23.92.82
DOCUMENT_ROOT = /var/www/html
REQUEST_SCHEME = http
CONTEXT_PREFIX = 
CONTEXT_DOCUMENT_ROOT = /var/www/html
REMOTE_PORT = 52482
GATEWAY_INTERFACE = CGI/1.1
REQUEST_METHOD = GET
QUERY_STRING = dir=ziptest
REQUEST_URI = /post.php?dir=ziptest
PHP_SELF = /post.php
REQUEST_TIME_FLOAT = 1508996164.351
REQUEST_TIME = 1508996164

No Post Params.
Empty post body.

您需要将正文写为名称-值对参数,例如'zipfile=.................‘。这将如何处理下面的二进制数据,每个人都在猜测。严格地说,您应该对数据进行URL编码。但真正需要什么取决于您的目标系统的行为。很可能你应该使用PUT而不是POST。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46945815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档