我目前正在从公司网络配置的更改中恢复,当用户通过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实现它 - 甚至更甜,使用Spring RestTemplate?