Jersey HTTP POST方法损坏了非文本文件

时间:2018-08-27 18:13:54

标签: java spring jersey

我有一个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;
}

1 个答案:

答案 0 :(得分:0)

有一个导致损坏的过滤器。过滤器已更新,问题已解决。