java上传一个文件。来自REST服务的二进制输入流zip文件
我开发了一个REST服务,将RESTEasy 3.0.12部署在WildFly 9上,用于在本地文件系统中上传文件。 我试图上传一个zip文件(用POST MAN发送的文件是二进制文件而不是多部分文件进行测试),我可以成功上传CSV、TXT、文件格式,但当我尝试发送一个zip文件时,它会正确地保存在本地文件系统中,但当我尝试解压时,会显示
- 标题错误
- 未经确认的档案开始
- 警告:标题错误
- 有效载荷数据结束后有一些数据
代码:
@Path("/uploadZip")
@POST
@Produces(MediaType.APPLICATION_JSON)
public Response uploadZip(@Context HttpServletRequest req, InputStream payload){
// save to filesystem local.
Writer wr = null;
String tempFileName = System.getProperty("java.io.tmpdir");
try {
wr = new BufferedWriter(new FileWriter(tempFileName));
IOUtils.copy(payload, wr, "UTF-8");
} catch (IOException e) {
return errorResponse;
} finally {
// closing writer and stream
IOUtils.closeQuietly(wr);
IOUtils.closeQuietly(payload);
}
...
}
有人知道如何保存一个好的zip文件吗
# 1 楼答案
***有关标题错误的一般信息:
Zip文件包含本地头和文件末尾的中心目录。我不知道令人毛骨悚然的细节,我也不会尝试对它们进行扩展,但如果你收到了一个标题错误,那么你的zip文件已经损坏。我不确定你说的“有效载荷数据”后面有一些数据是什么意思
***对代码的思考:让我们从概念上思考
您的端点正在捕获一个InputStream对象,它是表示字节输入流的所有InputStream对象的超类。你的文件基本上被包装在一个对象中,你可以一个字节接一个字节地读取。我看到的第一个问题是,您声明了一个Writer来从InputStream写入这些字节。请记住,读卡器和写卡器用于编写字符流,输入和输出流用于字节流。这解释了为什么你的CSV和TXT文件是成功的。了解这种差异并记住它是很重要的
我相信它会奏效。如果这给你带来任何麻烦,请告诉我。祝你好运