使用泽西上传(请求)文件的最佳方法是什么?

时间:2014-06-06 09:02:34

标签: java upload jersey

信息

目前,我有两种不同的方法可以使用Jersey上传(请求的)文件:

  • 方法1返回StreaminOutput
  • 方法2返回响应

@GET
@Path("download-file1/{fileName}")
public StreamingOutput downloadFile1(@PathParam("fileName") final String fileName)
        throws FileNotFoundException {
    final File file = new File("path/to/my/dir/" + fileName);
    if (!file.exists()) {
        throw new FileNotFoundException;
    }

    return new StreamingOutput() {
        @Override
        public void write(OutputStream output) throws IOException, WebApplicationException {
            Files.copy(file, output);
        }
    };
}

@GET
@Path("download-file2/{fileName}")
public Response downloadFile2(@PathParam("fileName") final String fileName) throws FileNotFoundException{
    final File file = new File("path/to/my/dir/" + fileName);
    if (!file.exists()) {
        throw new FileNotFoundException;
    }

    ResponseBuilder rb = null;
    rb = Response.ok((java.lang.Object)file);
    rb.header("Content-Disposition", "attachment; filename=" + fileName);
    return rb.build();
}

问题

我可以最好地使用这两个功能中的哪一个上传(所有类型)文件?

1 个答案:

答案 0 :(得分:0)

来自远方的最佳选择是流式处理,只要您不将整个文件加载到服务器内存上,并且只要将文件流式传输到网络上即可。 享受:)