我想通过网络读取多个数据流的能力,并写入一个文件到网络组合所有这些多个文件。
因为文件可能非常大,所以我不想做任何本地IO文件操作,而是对数据流进行操作。从网络中读取流,将流作为zip写入网络。
我正在尝试下面的示例代码,但我没有看到远程主机上正在写入任何文件。如果我使用FileInputStream,那么写入本地磁盘文件就可以了,而不是通过网络写入。
我在写入网络时遗漏了什么?
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();发布于 2017-10-26 13:30:46
你没有做任何输入,所以实际上什么也没发生。您至少需要获取HTTP响应代码:
int responseCode = connection.getResponseCode();
System.out.println("HTTP response code="+responseCode);更好的做法是,根据需要读取输入或错误流,然后关闭它。
编辑你有没有考虑过检查这些文件?下面是我刚刚创建的一个:
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。
https://stackoverflow.com/questions/46945815
复制相似问题