Java Jersey 1.17下载大文件

Java Jersey 1.17下载大文件,java,rest,jersey,Java,Rest,Jersey,我想从REST服务下载大文件,我有代码: @GET @Path("/laboDownloadAnyType") @Produces(MediaType.APPLICATION_OCTET_STREAM) public Response laboDownload() throws FileNotFoundException { final String fileName = "SampleVideo_1280x720_50mb.mp4"; final InputStream fil

我想从REST服务下载大文件,我有代码:

@GET
@Path("/laboDownloadAnyType")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response laboDownload() throws FileNotFoundException
{
    final String fileName = "SampleVideo_1280x720_50mb.mp4";
    final InputStream fileInStream = new FileInputStream(fileName);
    return Response.ok(fileInStream, MediaType.APPLICATION_OCTET_STREAM_TYPE)
      .header("Content-Disposition", "attachment; filename=\"" + fileName + "\"" ) //optional
      .build();
}
当我使用小文件时,效果非常好,但现在我想下载大文件(从500MB到3GB),我得到了

java.lang.OutOfMemoryError: Java heap space

如何解决此问题?

使用MappedByteBuffer而不是InputStream,您可以在此处检查MappedByteBuffer的实现


希望它能为您提供所需的功能。

使用MappedByteBuffer而不是InputStream,您可以在此处检查MappedByteBuffer的实现

希望它能为您提供所需的功能。

问题已解决: 我必须关闭通信日志记录

问题已解决:
如果可能的话,我必须关闭通信日志

对大文件使用FTP。显然,你试图把整个文件保存在内存中。。。别这样,等等。代码片段是服务器端的。。。我想我记得有一个流媒体解决方案。也许这会有所帮助:如果可能的话,对大文件使用FTP。显然,你试图把整个文件保存在内存中。。。别这样,等等。代码片段是服务器端的。。。我想我记得有一个流媒体解决方案。也许这可以帮助: