`

httpClient4 客户端 上传文件

    博客分类:
  • java
 
阅读更多

 

 

1.引入jar包

compile group: 'commons-fileupload', name: 'commons-fileupload', version: '1.3.1'

compile group: 'commons-io', name: 'commons-io', version: '2.5'

compile group: 'org.apache.httpcomponents', name: 'httpmime', version: '4.1.3'

compile group: 'org.apache.httpcomponents', name: 'httpcore', version: '4.4.6'

 

// https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient

compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.2'

 

2.  客户端代码:

 

 package com.cloud.test;

 

import java.io.File;

import java.io.IOException;

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

import java.util.Map.Entry;

 

import org.apache.http.HttpEntity;

import org.apache.http.HttpResponse;

import org.apache.http.HttpStatus;

import org.apache.http.client.ClientProtocolException;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.entity.mime.MultipartEntity;

import org.apache.http.entity.mime.content.FileBody;

import org.apache.http.impl.client.CloseableHttpClient;

import org.apache.http.impl.client.HttpClients;

import org.apache.http.util.EntityUtils;

 

public class HttpFilePost {

 

 

 

public static void main(String[] args) {

//from属性名称

String formName="names";

//上传文件

String fileName ="d:/123456.txt";

 

        HttpFilePost json = new HttpFilePost();        

        String url ="http://localhost:8080/cloud_server/nocheck/file/upfile.do";

        

        try {

        Map<String,String> map = new HashMap<String,String>();

        map.put(formName, fileName);

        map.put("name2", fileName);

        map.put("name3", fileName);

       

json.post(url, map);

} catch (IOException e) {

e.printStackTrace();

}

 

//{"resData":{"status":"1","message":"成功","data":{"name3":"ccba2662b6fb4942b612753b87d78faa_123456.txt","desc":"?????","names":"8abeae1ee4b84dd6b8726139f00028fb_123456.txt","name2":"146aa57526da4db0a3e51149a6935b2a_123456.txt"}},"token":null}

 

}

 

 

public void post(String url,Map<String,String> fileList) throws ClientProtocolException, IOException {

//HttpClient httpclient = new DefaultHttpClient();

CloseableHttpClient httpclient = HttpClients.createDefault();

 

HttpPost post = new HttpPost(url);

//StringBody stringBody = new StringBody("文件的描述");

MultipartEntity entity = new MultipartEntity();

if(null != fileList){

Iterator<Entry<String, String>> item = fileList.entrySet().iterator();

while(item.hasNext()){

Entry<String,String> it = item.next();

FileBody fileBody = new FileBody(new File(it.getValue()));

entity.addPart(it.getKey(), fileBody);

}

}

 

//entity.addPart("desc", stringBody);

 

post.setEntity(entity);

 

HttpResponse response = httpclient.execute(post);

if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) {

HttpEntity entitys = response.getEntity();

if (entity != null) {

System.out.println(entity.getContentLength());

System.out.println(EntityUtils.toString(entitys));

}

}

httpclient.getConnectionManager().shutdown();

}

 

}

 

 

输出结果:

{"resData":{"status":"1","message":"成功","data":{"name3":"f764bc995c5d476da2b35e451984c45c_123456.txt","names":"01f55516d10b41bc846571a08c51edcb_123456.txt","name2":"5b3ed125df2a44388632ae1ee2266d9f_123456.txt"}},"token":null}

 

 

 

 

3. web 端代码:

 

package com.cloud.api.controller;

 

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Iterator;

import java.util.List;

import java.util.Map;

import java.util.UUID;

 

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

import org.apache.commons.fileupload.FileItem;

import org.apache.commons.fileupload.FileItemFactory;

import org.apache.commons.fileupload.disk.DiskFileItemFactory;

import org.apache.commons.fileupload.servlet.ServletFileUpload;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.ResponseBody;

 

import com.cloud.api.pojo.ResReslt;

import com.cloud.api.pojo.ResultInfo;

import com.cloud.api.util.ComStatus;

 

@Controller

public class ToolsController extends BaseController {

 

public static final String PATH = "d://test";

 

@ResponseBody

@RequestMapping(value = "nocheck/file/upfile", method = RequestMethod.POST, produces = {

"application/json;charset=UTF-8" })

public ResReslt upFile(String req, HttpServletResponse response, HttpServletRequest request) {

// PrintWriter out = null;

// response.setContentType("text/html;charset=UTF-8");

//

 

ResReslt resReslt = new ResReslt();

Map<String, Object> map = new HashMap<String, Object>();

FileItemFactory factory = new DiskFileItemFactory();

ServletFileUpload upload = new ServletFileUpload(factory);

File directory = null;

List<FileItem> items = new ArrayList<FileItem>();

 

InputStream is = null;

 

FileOutputStream fos = null;

 

ResultInfo<Map<String,Object>> resultInfo = new ResultInfo<Map<String,Object>>();

 

try {

items = upload.parseRequest(request);

// 得到所有的文件

Iterator<FileItem> it = items.iterator();

while (it.hasNext()) {

FileItem fItem = (FileItem) it.next();

String fName = "";

Object fValue = null;

if (fItem.isFormField()) { // 普通文本框的值

fName = fItem.getFieldName();

fValue = fItem.getString("UTF-8");

map.put(fName, fValue);

} else { // 获取上传文件的值

fName = fItem.getFieldName();

fValue = fItem.getInputStream();

String name = fItem.getName();

if (name != null && !("".equals(name))) {

name = name.substring(name.lastIndexOf(File.separator) + 1);

 

directory = new File(PATH);

if (!directory.exists()) {

directory.mkdirs();

}

 

String preFile =UUID.randomUUID().toString().replace("-", "");

String filePath = (PATH) + File.separator + preFile+"_"+name;

 

map.put(fName,  preFile+"_"+name);

is = fItem.getInputStream();

fos = new FileOutputStream(filePath);

byte[] buffer = new byte[1024];

int len = 0;

while ((len = is.read(buffer, 0, 1024)) != -1) {

fos.write(buffer, 0, len);

}

fos.flush();

 

}

}

}

} catch (Exception e) {

logItr.error("读取http请求属性值出错" + e.getMessage());

resultInfo.setStatus(ComStatus.RESULTINFO_STATUS_FAILE);

resultInfo.setMessage(ComStatus.RESULTINFO_MESSAGE_FAILE);

 

 

} finally {

try {

if (null != fos) {

fos.close();

}

 

if (null != is) {

is.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

 

 

resultInfo.setData(map);

resReslt.setResData(resultInfo);

 

return resReslt;

}

 

}

 

分享到:
评论

相关推荐

    HttpClient模拟客户端传输文件

    HttpClient模拟客户端传输文件是Java开发中的常见需求,尤其在与服务器进行交互时,例如上传用户数据、图片或者其他文件。在这个过程中,我们通常会使用POST请求将文件作为请求体发送到服务器。 首先,我们需要引入...

    HttpClient 4 - 文件上传

    HttpClient 4 版本引入了许多改进,使得文件上传变得更加简单和高效。在这个主题中,我们将深入探讨HttpClient 4如何实现文件上传,以及相关的核心概念和技术。 首先,我们需要了解HttpClient 4的基本用法。...

    HttpClient 4文件上传

    ### HttpClient 4 文件上传知识点详解 #### 一、概述 在Java开发中,经常会遇到需要通过HTTP协议上传文件的需求。Apache HttpClient是一个强大的客户端HTTP组件,它不仅支持HTTP协议,还能处理HTTPS请求,并提供了...

    httpclient 文件上传 下载

    HTTPClient 4提供了`MultipartEntityBuilder`或`HttpEntityEnclosingRequestBase`类来构建多部分表单数据,用于上传文件。首先,你需要创建一个`FileEntity`对象,指定要上传的文件路径,然后将其添加到`...

    httpclient客户端jar.rar

    HTTPClient是Java编程语言中广泛使用的HTTP客户端库,主要用于与HTTP服务器进行通信。这个压缩包文件包含三个重要的组件,它们是: 1. **httpclient-4.3.3.jar**:这是Apache HttpClient库的主要实现,版本4.3.3。...

    https+spring3+httpclient4多文件上传

    总之,"HTTPS + Spring3 + HttpClient4 多文件上传"涉及的技术点广泛,从安全通信到Web开发,再到客户端的HTTP请求,都需要深入理解和熟练掌握。在实际应用中,还需要根据项目需求进行定制和优化,确保上传操作的...

    C# http方式文件上传客户端

    在C#编程环境中,开发一个HTTP文件上传客户端是一项常见的任务,尤其在构建Web应用程序或集成API接口时。本文将深入探讨如何使用C#实现在HTTP协议基础上的文件上传功能,并展示上传进度,确保程序的正确运行。 首先...

    httpclient和RestfuL风格上传下载文件

    在Java开发中,HTTPClient和RESTful风格的接口被广泛用于实现文件的上传与下载功能。HTTPClient是一个强大的HTTP客户端库,而RESTful是一种轻量级的、基于HTTP协议的软件架构风格,常用于构建Web服务。在分布式系统...

    HttpClient 模仿表单上传文件

    在标题"HttpClient模仿表单上传文件"中,我们关注的是如何使用HttpClient来模拟浏览器的表单提交,尤其是涉及到文件上传的场景。在描述中虽然没有具体信息,但通常这种情况会涉及multipart/form-data编码,这是HTML...

    httpclient4上传文件中文乱码问题解决办法代码示例

    服务器端自己写,本示例为客户端代码,可以解决httpClient4乱码问题,是替代修改源码的最佳写法。

    HttpClient 文件上传

    文件上传通常涉及到Web服务器与客户端之间的交互,比如用户通过网页上传图片或文档到服务器。HttpClient库提供了一个方便的接口来实现这种功能。以下是一些关键知识点: 1. **MultipartEntityBuilder**: 在...

    httpclient 上传文件

    在本篇中,我们将深入探讨如何利用Apache Commons HTTPClient库来上传文件,以及与之相关的知识点。 首先,`commons-httpclient-3.1.jar`是Apache Commons HTTPClient的版本3.1,这是一个早期但仍然被许多项目使用...

    httpClient上传文件

    在这个场景中,我们关注的是如何使用HttpClient来上传文件到服务器。Apache HttpClient支持POST请求,特别是Multipart/form-data类型的POST,这是上传文件的标准格式。以下是关于这个主题的详细讲解: 1. **...

    Java后端HttpClient Post提交文件流 及服务端接收文件流

    HttpClient Post提交多文件及多个普通参数,已经封装成工具类。 需传入 要请求的url 普通参数map 例 map.put("param1","张三"); 需要传入的文件流map 其中key为文件名 服务端接收无乱码。

    客户端文件上传

    客户端文件上传是一个常见的任务,尤其在开发桌面应用如WPF(Windows Presentation Foundation)或WinForm时,需要与服务器交互,实现文件数据的交换。在这个场景中,WPF被用作用户界面,它允许用户选择本地文件,而...

    四、使用HttpClient上传测试文件服务器

    本篇文章将详细讲解如何利用HttpClient上传文件到测试服务器,这在进行API测试、自动化测试或者集成测试时非常有用。我们先来理解一下HttpClient的基本概念,然后逐步探讨文件上传的步骤。 HttpClient是由Apache...

    HttpClient PostMethod 上传文件

    在本示例中,我们将深入探讨如何使用HttpClient的PostMethod来上传文件,以及处理Get和Post请求中的乱码问题。 一、HttpClient基础 HttpClient库提供了一套完整的API,允许我们构建复杂的HTTP请求。它支持GET、POST...

    HttpClient上传文件需要的Jar包

    在这个场景中,"HttpClient上传文件需要的Jar包"指的是在使用HttpClient进行文件上传操作时,你需要确保引入了正确的依赖库。 首先,我们需要了解HttpClient的基本概念。HttpClient是Apache软件基金会的一个项目,...

Global site tag (gtag.js) - Google Analytics