我有一个生成zip文件的PHP脚本。
生成的zip文件在通过浏览器下载时会打开文件。
我已经制作了一个Java服务来测试这个PHP脚本是人们可以用Java代码接收zip文件。
当我将收到的Java代码复制到zip文件中时,我收到一条消息,说zip文件已损坏。
有人可以提供建议吗。
谢谢。
PHP代码
export default function bar(WrappedComponent) {
return class Bar extends WrappedComponent {
funcFromHoc() {
alert("Hello from HOC function!");
}
render() {
return (
//call super.list() here to populate drawer list
{super.render()}
);
}
}
}
JAVA CODE:
$zip = new ZipArchive();
$filename = "labels.zip";
$fileArray = array();
if ($zip->open($filename, ZipArchive::CREATE)!==TRUE) {
exit("cannot open <$filename>\n");
}
foreach ($labelPaths as $labelPath) {
$zip->addFile($labelPath);
}
$zip->close();
header($_SERVER['SERVER_PROTOCOL'].' 200 OK');
header("Content-Type: application/zip");
header("Content-Transfer-Encoding: Binary");
header("Content-Length: ".filesize($filename));
header("Content-Disposition: attachment; filename=\"".basename($filename)."\"");
readfile($filename);
答案 0 :(得分:1)
这将是你的问题:
String line;
StringBuffer response = new StringBuffer();
while((line = rd.readLine()) != null) {
response.append(line);
response.append('\r');
}
上述方法适用于从输入流中读取字符串,但您正在读取ZIP文件的二进制数据并将其视为字符串。然后将该字符串打印到控制台,然后将其复制到文本文件中 - 那里有很多失败点!
上述过程实际上是行不通的。
这几乎肯定会因为该过程的每个步骤中的编码问题而失败,如果没有别的,此外你还要在每个换行符中插入\ r \ n字符(这也是错误的。)
相反,您只想将数据视为字节,并使用字节数组作为缓冲区(而不是字符串)将其直接泵入文件:
try(FileOutputStream out = new FileOutputStream(outFile)) {
byte[] buffer = new byte[1024];
int read;
while ((read = inputStream.read(buffer)) != -1) {
out.write(buffer, 0, read);
}
}