在servlet之间以String形式发送文件

时间:2015-12-22 10:24:27

标签: java servlets

我想在不同服务器中的两个servlet之间发送一个大文件。此文件可以视为一个大字符串。所以,我不能使用doGet,因为字符串更大。请问最好的方法是什么?

我读到SendRedirect是我可以使用的唯一方法,因为servlet位于两个不同的服务器中。在另一个时间我不能使用SendRedirect因为我无法通过URL发送大字符串或文件。那么,解决方案是什么?

1 个答案:

答案 0 :(得分:-1)

对您的文件进行编码:base64

byte[] bt= 
// Conversion B64
String result=DatatypeConverter.printBase64Binary(bt);

将其作为参数

放入doPost中

使用java.net.URLConnection:

String urlParameters  = "my_file=my_long_file_inbase64_here";
byte[] postData       = urlParameters.getBytes( StandardCharsets.UTF_8 );
int    postDataLength = postData.length;
String request        = "http://otherserver.com/myservlet";
URL    url            = new URL( request );
HttpURLConnection conn= (HttpURLConnection) url.openConnection();           
conn.setDoOutput( true );
conn.setInstanceFollowRedirects( false );
conn.setRequestMethod( "POST" );
conn.setRequestProperty( "Content-Type", "application/x-www-form-urlencoded"); 
conn.setRequestProperty( "charset", "utf-8");
conn.setRequestProperty( "Content-Length", Integer.toString( postDataLength ));
conn.setUseCaches( false );
try( DataOutputStream wr = new DataOutputStream( conn.getOutputStream())) {
   wr.write( postData );
}

来自:Java - sending HTTP parameters via POST method easily

只需在另一侧解码

byte [] byteArray=DatatypeConverter.parseBase64Binary(result);

您也可以使用多部分帖子(无需)

您可以在doPost中获取数据:doGet and doPost in Servlets

public void doPost(HttpServletRequest req, HttpServletResponse res)
       throws ServletException, IOException {
mydata_serialized = req.getParameter("my_file");