在java web应用程序中发送和接收文件
您好,我正在开发web应用程序,我需要传输任何类型的文件 将文件从web应用程序转移到另一个 我能够以字符串格式传输数据,但在 我需要传送文件。首先,我显示用于传输数据的代码 从发送方到接收方的参数 发送方:在java web应用程序中发送和接收文件,java,servlets,file-upload,httpclient,Java,Servlets,File Upload,Httpclient,您好,我正在开发web应用程序,我需要传输任何类型的文件 将文件从web应用程序转移到另一个 我能够以字符串格式传输数据,但在 我需要传送文件。首先,我显示用于传输数据的代码 从发送方到接收方的参数 发送方: HttpClient client = new HttpClient(); HttpMethod method = new PostMethod("http://192.168.1.108:8081/Receiver-Server/registerAction"); List<
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);
在上面,我成功地获取了数据。所以现在我需要转移任何
文件类型,但获取问题
有人能帮我解决这个问题吗,任何提示或教程都可以
更好地理解。传输文件需要多部分HTTP请求。HTTPClient最近引入了
MultipartEntityBuilder
,以便于开发。完整的项目可以从
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());
}
}
DiskFileItemFactory=new DiskFileItemFactory();
ServletContext ServletContext=this.getServletConfig().getServletContext();
filerepository=(File)servletContext.getAttribute(“javax.servlet.context.tempdir”);
setRepository(repository);
ServletFileUpload upload=新的ServletFileUpload(工厂);
列表项=upload.parseRequest(请求);
用于(文件项:项){
如果(!item.isFormField()){
writer.println(“fieldName=“+item.getFieldName());
writer.println(“fileName=“+item.getName());
writer.println(“contentType=“+item.getContentType());
writer.println(“大小[字节]=”+item.getSize());
File uploadedFile=File.createTempFile(“temp”,“.txt”);
item.write(上传文件);
writer.println(“存储为”+uploadedFile.getAbsolutePath());
}
}
我认为代码非常简单,不需要解释,但可以随意提问
一个重要的注意事项:永远不要使用提供的文件名作为创建文件的文件名。这是一个安全风险。我建议您查看PostMethod.setRequestEntity方法以及FileRequestEntity类,假设您使用的是Apache的HttpClient库。最好使用MultipartEntityBuilderHanks作为答案,您能告诉我如何在服务器/接收器端获取/读取此文件吗。Http commons upload library。您可以发送一些代码或任何教程页面来阅读响应吗,因为我尝试了使用addText而不是发送文件来处理您的示例,但我得到了空值…它对您有效吗?您可以签出完整的GitHub项目并运行它。感谢朋友给我的精彩解释和时间…它对我有用。。。
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());
}
}