我目前正在从公司网络配置的更改中恢复,当用户通过 VPN 连接时,该更改破坏了我的文档管理应用程序中的文件传输。富客户端和我的应用服务器之间的通信使用Springs HttpInvoker实现,文件传输使用RMIIO。RemoteInputStream 只是我模型对象上的一个属性,它代表我传输的文件。
所以无论如何,我必须替换 RMIIO(DirectRemoteInputStream 不是这里的解决方案)并使用纯 HTTP 流。我想将流中的序列化模型对象和二进制数据发送到服务器,到目前为止使用多部分请求可以正常工作:
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(...);
MultipartEntity multipartEntity = new MultipartEntity();
InputStreamBody filePart = new InputStreamBody(new FileInputStream(file), "application/octet-stream", file.getName());
// this is my model object
byte[] serializedFileObject = serializeObject(fileObject);
multipartEntity.addPart("file", filePart);
multipartEntity.addPart("fileObject", new ByteArrayBody(serializedFileObject, "fileObject.ser"));
post.setEntity(multipartEntity);
HttpResponse response = client.execute(post);
EntityUtils.consume(response.getEntity());
工作正常,我可以将模型对象和二进制数据发送到应用程序服务器。但是如何做相反的事情——在一个响应中返回一个模型对象和二进制数据?我读到了多部分响应以及它们如何被多个浏览器使用,但是如何使用 commons-httpclient 实现它 - 甚至更甜,使用 springs RestTemplate?