あるJavaアプリから(サーブレット経由で)別のJavaアプリにtar.gzipファイルを送信する必要があります-これを実現するためにMultipartEntityでHTTPクライアントを使用しています。
ファイルの転送中に、ファイルのサイズが 2 倍になり (解凍されたかのように)、tar.gz または tar ファイルとして認識できなくなります。
送信方法は次のとおりです。
HttpClient http = new DefaultHttpClient();
HttpPost post = new HttpPost(url);
MultipartEntity multipart = new MultipartEntity();
ContentBody fileContent = new FileBody(file, "application/octet-stream");
ContentBody pathContent = new StringBody(file.getAbsolutePath());
multipart.addPart("package", fileContent);
multipart.addPart("path", pathContent);
post.setEntity(multipart);
HttpResponse response = null;
try {
response = http.execute(post);
StringWriter sw = new StringWriter();
IOUtils.copy(response.getEntity().getContent(), sw);
} catch (Exception ex){
log.error("Unable to POST to ["+url+"].",ex);
}
return result;
上記のコードが POST するサーブレット メソッドは次のとおりです。
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
log.info("File transfer request received, collecting file information and saving to server.");
Part filePart = req.getPart("package");
Part filePathPart = req.getPart("path");
StringWriter sw = new StringWriter();
IOUtils.copy(filePathPart.getInputStream(), sw);
String path = sw.getBuffer().toString();
File outputFile = new File(path);
FileWriter out = new FileWriter(outputFile);
IOUtils.copy(filePart.getInputStream(), out);
log.info("File ["+path+"] has been saved to the server.");
out.close();
sw.close();
}
私はこのようなことの専門家ではありません - そして、Google を介したヘルプはあまりないようです...どんな助けも素晴らしいでしょう.
ありがとう、ピート