在java 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<

您好,我正在开发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);
在上面,我成功地获取了数据。所以现在我需要转移任何 文件类型,但获取问题

有人能帮我解决这个问题吗,任何提示或教程都可以
更好地理解。

传输文件需要多部分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());
    }
}