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模拟客户端传输文件是Java开发中的常见需求,尤其在与服务器进行交互时,例如上传用户数据、图片或者其他文件。在这个过程中,我们通常会使用POST请求将文件作为请求体发送到服务器。 首先,我们需要引入...
HttpClient 4 版本引入了许多改进,使得文件上传变得更加简单和高效。在这个主题中,我们将深入探讨HttpClient 4如何实现文件上传,以及相关的核心概念和技术。 首先,我们需要了解HttpClient 4的基本用法。...
### HttpClient 4 文件上传知识点详解 #### 一、概述 在Java开发中,经常会遇到需要通过HTTP协议上传文件的需求。Apache HttpClient是一个强大的客户端HTTP组件,它不仅支持HTTP协议,还能处理HTTPS请求,并提供了...
HTTPClient 4提供了`MultipartEntityBuilder`或`HttpEntityEnclosingRequestBase`类来构建多部分表单数据,用于上传文件。首先,你需要创建一个`FileEntity`对象,指定要上传的文件路径,然后将其添加到`...
HTTPClient是Java编程语言中广泛使用的HTTP客户端库,主要用于与HTTP服务器进行通信。这个压缩包文件包含三个重要的组件,它们是: 1. **httpclient-4.3.3.jar**:这是Apache HttpClient库的主要实现,版本4.3.3。...
总之,"HTTPS + Spring3 + HttpClient4 多文件上传"涉及的技术点广泛,从安全通信到Web开发,再到客户端的HTTP请求,都需要深入理解和熟练掌握。在实际应用中,还需要根据项目需求进行定制和优化,确保上传操作的...
在C#编程环境中,开发一个HTTP文件上传客户端是一项常见的任务,尤其在构建Web应用程序或集成API接口时。本文将深入探讨如何使用C#实现在HTTP协议基础上的文件上传功能,并展示上传进度,确保程序的正确运行。 首先...
在Java开发中,HTTPClient和RESTful风格的接口被广泛用于实现文件的上传与下载功能。HTTPClient是一个强大的HTTP客户端库,而RESTful是一种轻量级的、基于HTTP协议的软件架构风格,常用于构建Web服务。在分布式系统...
在标题"HttpClient模仿表单上传文件"中,我们关注的是如何使用HttpClient来模拟浏览器的表单提交,尤其是涉及到文件上传的场景。在描述中虽然没有具体信息,但通常这种情况会涉及multipart/form-data编码,这是HTML...
服务器端自己写,本示例为客户端代码,可以解决httpClient4乱码问题,是替代修改源码的最佳写法。
文件上传通常涉及到Web服务器与客户端之间的交互,比如用户通过网页上传图片或文档到服务器。HttpClient库提供了一个方便的接口来实现这种功能。以下是一些关键知识点: 1. **MultipartEntityBuilder**: 在...
在本篇中,我们将深入探讨如何利用Apache Commons HTTPClient库来上传文件,以及与之相关的知识点。 首先,`commons-httpclient-3.1.jar`是Apache Commons HTTPClient的版本3.1,这是一个早期但仍然被许多项目使用...
在这个场景中,我们关注的是如何使用HttpClient来上传文件到服务器。Apache HttpClient支持POST请求,特别是Multipart/form-data类型的POST,这是上传文件的标准格式。以下是关于这个主题的详细讲解: 1. **...
HttpClient Post提交多文件及多个普通参数,已经封装成工具类。 需传入 要请求的url 普通参数map 例 map.put("param1","张三"); 需要传入的文件流map 其中key为文件名 服务端接收无乱码。
客户端文件上传是一个常见的任务,尤其在开发桌面应用如WPF(Windows Presentation Foundation)或WinForm时,需要与服务器交互,实现文件数据的交换。在这个场景中,WPF被用作用户界面,它允许用户选择本地文件,而...
本篇文章将详细讲解如何利用HttpClient上传文件到测试服务器,这在进行API测试、自动化测试或者集成测试时非常有用。我们先来理解一下HttpClient的基本概念,然后逐步探讨文件上传的步骤。 HttpClient是由Apache...
在本示例中,我们将深入探讨如何使用HttpClient的PostMethod来上传文件,以及处理Get和Post请求中的乱码问题。 一、HttpClient基础 HttpClient库提供了一套完整的API,允许我们构建复杂的HTTP请求。它支持GET、POST...
在这个场景中,"HttpClient上传文件需要的Jar包"指的是在使用HttpClient进行文件上传操作时,你需要确保引入了正确的依赖库。 首先,我们需要了解HttpClient的基本概念。HttpClient是Apache软件基金会的一个项目,...