我有一个HTTP POST方法,如果我上载文本文件,该方法可以正常工作。但是,如果我尝试上载word文档,pdf,zip,gzip等...,则上载的文件在此过程中会损坏。我正在使用邮递员发送请求。我执行“ POST”方法,输入url,添加标题(尝试了各种标题,它实际上并没有改变任何东西,所以现在我没有输入任何内容),然后在正文上选择“ formdata”并选择文件。我真的只需要修复此问题,即可支持以.csv.gz和.csv结尾的文件。目前,csv很好,但是.csv.gz是损坏的类型。我还尝试了其他非文本文件,只是为了看看会发生什么并且它们也损坏了。我无法弄清楚是否有某种编码,过滤器等导致这种情况的发生,可以删除或需要应用某些设置。或者,如果还有其他方法可以解决这个问题,那么非文本文件将与原始文件保持不变。
我的应用程序正在运行Spring v1.5.3和Jersey 2.25。
@Override
public Response uploadTopicFile(String topic, FormDataMultiPart formDataMultipart) throws Exception {
List<BodyPart> bodyParts = formDataMultipart.getBodyParts();
// Getting the body of the request (should be a file)
for (BodyPart bodyPart : bodyParts) {
String fileName = bodyPart.getContentDisposition().getFileName();
InputStream fileInputStream = bodyPart.getEntityAs(InputStream.class);
String uploadedFileLocation = env.getProperty("temp.upload.path") + File.separator + fileName;
this.saveFile(fileInputStream, uploadedFileLocation);
String output = "File uploaded to : " + uploadedFileLocation;
log.debug(output);
}
return Response.status(201).build();
}
private void saveFile(InputStream uploadedInputStream, String serverLocation) {
try {
// Create the output directory
Files.createDirectories(Paths.get(serverLocation).getParent());
// Get the output stream
OutputStream outputStream = new FileOutputStream(new File(serverLocation));
int read = 0;
byte[] bytes = new byte[1024];
// Loop through the stream
while ((read = uploadedInputStream.read(bytes)) != -1) {
// Output to file
outputStream.write(bytes, 0, read);
}
// Flush and close
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
return;
}
答案 0 :(得分:0)
有一个导致损坏的过滤器。过滤器已更新,问题已解决。