【发布时间】:2017-02-20 01:41:20
【问题描述】:
我在我的Android APP中使用NanoHTTPD作为Web服务器,我希望在服务器端压缩一些文件并创建一个InputStream,并使用代码A在客户端下载InputStream。
我已经阅读了How to zip and unzip the files? 的代码 B,但是如何在不先创建 ZIP 文件的情况下在 Android 中创建 ZIP InputStream?
顺便说一句,我不认为 Code C 是个好方法,因为它先制作 ZIP 文件,然后将 ZIP 文件转换为 FileInputStream ,我希望直接创建一个 ZIP InputStream !
代码 A
private Response ActionDownloadSingleFile(InputStream fis) {
Response response = null;
response = newChunkedResponse(Response.Status.OK, "application/octet-stream",fis);
response.addHeader("Content-Disposition", "attachment; filename="+"my.zip");
return response;
}
代码 B
public static void zip(String[] files, String zipFile) throws IOException {
BufferedInputStream origin = null;
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFile)));
try {
byte data[] = new byte[BUFFER_SIZE];
for (int i = 0; i < files.length; i++) {
FileInputStream fi = new FileInputStream(files[i]);
origin = new BufferedInputStream(fi, BUFFER_SIZE);
try {
ZipEntry entry = new ZipEntry(files[i].substring(files[i].lastIndexOf("/") + 1));
out.putNextEntry(entry);
int count;
while ((count = origin.read(data, 0, BUFFER_SIZE)) != -1) {
out.write(data, 0, count);
}
}
finally {
origin.close();
}
}
}
finally {
out.close();
}
}
代码 C
File file= new File("my.zip");
FileInputStream fis = null;
try
{
fis = new FileInputStream(file);
} catch (FileNotFoundException ex)
{
}
【问题讨论】:
-
您需要在服务器中创建一个输出流。
ZipOutputStream,包裹着服务器技术为您提供的任何输出流。 -
谢谢! EJP,你能给我一些示例代码吗?
-
你不能直接创建一个 ZipInputSteam,因为 ZipInputSteam 扩展了 FilterInputStream,所以它基本上作为一个包装类,为流提供读取 zip 文件的功能。你需要
new ZipInputStream(new FileInputStream(zipFile)) -
谢谢!对于 Jonah Sloan,你的意思是我必须先创建 ZIP 文件,然后从 ZIP 文件中获取 InputStream 吗?
-
如果我理解正确,代码 A 是你的服务器端代码,你能提供你目前拥有的客户端代码吗?
标签: java android zipfile fileinputstream fileoutputstream