我使用Jersey作为我的REST实现,使用JAXB来表示我的类。 我做了一个小文件传输机制。在我将其设置为JAXB对象之前,在客户端将文件转换为BASE64字符串。然后将JAXB对象发送到带有Jersey的服务器。
它可以处理不超过50 MB左右的文件,但是当我尝试发送500 MB文件时,我的客户端会收到OutOfMemoryError
。我已将-Xms
和-Xmx
设置为2048米,但它没有帮助,我仍然收到错误。
如何使用非常大的文件?
答案 0 :(得分:1)
重写整个内容以流式传输文件。不要base64编码它,不要使用JAXB,不要将它嵌入XML中。即使文件是900 TB也能使它工作。如果必须,在泽西岛以外的地方实施。 HTTP GET导致HTTP响应,文件字节流入正文。您可以在许多servlet教程的介绍中找到实现此功能的示例servlet。
答案 1 :(得分:1)
Webservices不是为传输大量数据而设计的;它们专为进程间通信而设计。您使用FTP等特定协议进行文件传输。如果我必须设计这样的东西,我会分两步完成。
但是,您可以尝试使用此example使用Jersey客户端上传大文件。