使用第三方服务器通过 Jaxax REST 客户端接口上传文件
Uploading a file via Jaxax REST Client interface, with third party server
我需要调用远程 REST 接口处理程序并在请求中向其提交文件 body。请注意我不控制服务器。我无法将请求更改为多部分,客户端必须按照外部规范工作。
到目前为止,我设法让它像这样工作(为了简洁省略了 headers 等):
byte[] data = readFileCompletely ();
client.target (url).request ().post (Entity.entity (data, "file/mimetype"));
这行得通,但会因无法放入内存的大文件而失败。由于我对文件大小没有限制,这是一个问题。
问题:是否可以使用流或类似的东西来避免将整个文件读入内存?
如果可能,我宁愿避免 implementation-specific 扩展。如果不是,也可以使用适用于 RESTEasy(在 Wildfly 上)的解决方案。
您可以使用诸如普通 java.net.URLConnection 之类的库来降低级别并构建 HTTP 请求。
我自己没有尝试过,但是有示例代码可以读取本地文件并将其写入请求流,而无需将其加载到字节数组中。
当然,这个解决方案需要更多的手动编码,但它应该可以工作(除非 java.net.URLConnection 将整个文件加载到内存中)
ReastEasy 和 Jersey 开箱即用地支持 InputStream,因此只需使用 Entity.entity(inputStream, "application/octet-stream");
或您想要设置的任何 Content-Type header。
我需要调用远程 REST 接口处理程序并在请求中向其提交文件 body。请注意我不控制服务器。我无法将请求更改为多部分,客户端必须按照外部规范工作。
到目前为止,我设法让它像这样工作(为了简洁省略了 headers 等):
byte[] data = readFileCompletely ();
client.target (url).request ().post (Entity.entity (data, "file/mimetype"));
这行得通,但会因无法放入内存的大文件而失败。由于我对文件大小没有限制,这是一个问题。
问题:是否可以使用流或类似的东西来避免将整个文件读入内存?
如果可能,我宁愿避免 implementation-specific 扩展。如果不是,也可以使用适用于 RESTEasy(在 Wildfly 上)的解决方案。
您可以使用诸如普通 java.net.URLConnection 之类的库来降低级别并构建 HTTP 请求。
我自己没有尝试过,但是有示例代码可以读取本地文件并将其写入请求流,而无需将其加载到字节数组中。
当然,这个解决方案需要更多的手动编码,但它应该可以工作(除非 java.net.URLConnection 将整个文件加载到内存中)
ReastEasy 和 Jersey 开箱即用地支持 InputStream,因此只需使用 Entity.entity(inputStream, "application/octet-stream");
或您想要设置的任何 Content-Type header。