在java Web应用程序中发送和接收文件

时间:2014-03-20 15:08:55

标签: 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<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");

上面我成功获取数据。所以现在我需要转移任何 文件类型,但问题。

所以任何人都可以帮助我解决这个问题,任何提示或教程都是如此 最好不胜感激。

1 个答案:

答案 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());
    }
}

我认为代码非常简单,不需要解释,但可以随意提问。

一个重要的注意事项:永远不要使用提供的文件名作为创建文件的文件名。这是一种安全风险。