您好我正在处理Web应用程序,我需要转移任何类型 从Web应用程序到另一个的文件。
我能够以字符串格式传输数据但是我遇到了问题 我需要传输文件。首先,我展示用于传输数据的代码 从发件人到收件人的参数。
发件人方:
HttpClient client = new HttpClient();
HttpMethod method = new PostMethod("http://192.168.1.108:8081/Receiver-Server/registerAction");
List<NameValuePair> pairs = new ArrayList<NameValuePair>();
NameValuePair nvp1= new NameValuePair("name", "Aniket");
NameValuePair nvp2= new NameValuePair("Age", "26");
method.setQueryString(new NameValuePair[]{nvp1,nvp2});
int statusCode = client.executeMethod(method);
System.out.println(statusCode);
现在接收方,
String userName = request.getParameter("name");
String age = request.getParameter("Age");
上面我成功获取数据。所以现在我需要转移任何 文件类型,但问题。
所以任何人都可以帮助我解决这个问题,任何提示或教程都是如此 最好不胜感激。
答案 0 :(得分:2)
传输文件需要多部分HTTP请求。 HTTPClient最近引入了MultipartEntityBuilder
以便于开发。完整项目可以从GitHub
HttpClient
代码
CloseableHttpClient httpClient = HttpClients.createDefault();
try {
FileBody bin = new FileBody(file);
HttpEntity reqEntity = MultipartEntityBuilder.create().addPart("bin", bin).build();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(reqEntity);
CloseableHttpResponse postResponse = httpClient.execute(httpPost);
try {
writer.println(postResponse.getStatusLine());
HttpEntity postResponseEntity = postResponse.getEntity();
if (postResponseEntity != null) {
writer.println(EntityUtils.toString(postResponseEntity));
}
} finally {
postResponse.close();
}
} finally {
httpClient.close();
}
使用FileUpload
接收文件的Servlet
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletContext servletContext = this.getServletConfig().getServletContext();
File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
factory.setRepository(repository);
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = upload.parseRequest(request);
for (FileItem item : items) {
if (!item.isFormField()) {
writer.println("fieldName = " + item.getFieldName());
writer.println("fileName = " + item.getName());
writer.println("contentType = " + item.getContentType());
writer.println("size [bytes] = " + item.getSize());
File uploadedFile = File.createTempFile("temp", ".txt");
item.write(uploadedFile);
writer.println("stored as " + uploadedFile.getAbsolutePath());
}
}
我认为代码非常简单,不需要解释,但可以随意提问。
一个重要的注意事项:永远不要使用提供的文件名作为创建文件的文件名。这是一种安全风险。