0

我使用 Jersey 作为我的 REST 实现和 JAXB 来代表我的类。我做了一个微小的文件传输机制。在客户端,文件在我将其设置为 JAXB 对象之前被转换为 BASE64 字符串。然后将 JAXB 对象与 Jersey 一起发送到服务器。

它适用于不大于 50 MB 左右的文件,但是当我尝试发送一个 500 MB 的文件时,我得到OutOfMemoryError了我的客户端。我已将-Xmsand设置-Xmx为 2048m 但它没有帮助,我仍然得到错误。

我该怎么做才能让它处理非常大的文件?

4

2 回答 2

1

Web 服务不是为传输大量数据而设计的。它们是为进程间通信而设计的。您使用 FTP 等特定协议进行的文件传输。如果我必须设计这样的东西,我会分两步完成。

  1. 使用 FTP 上传文件(用于 FTP 的 apache commons.net 或用于 SFTP 的 JSCH)列表项
  2. 调用 webservice 来告诉文件在那里

但是,您可以尝试使用 Jersey 客户端上传大文件。

于 2013-06-27T12:09:21.350 回答
1

重写整个内容以流式传输文件。不要对其进行 base64 编码,不要使用 JAXB,不要将其嵌入 XML。即使文件为 900 TB,也能正常工作。如果必须,请在泽西岛之外实施。HTTP GET 导致 HTTP 响应,文件字节在正文中流式传输。您可以在许多 servlet 教程介绍等中找到实现此功能的示例 servlet。

于 2013-06-26T17:39:36.553 回答