当前位置:首页 > 开发 > 编程语言 > Http > 正文

httpclient4.3 上传下载文件

发表于: 2015-04-08   作者:zhangzhaoaaa   来源:转载   浏览:
摘要: 转自:http://blog.csdn.net/lianghongge/article/details/42120751            http://www.oschina.net/code/snippet_1864608_37835   通过httpclient的上传文件,可以处理跨域上传的问题,比如先上传到A服

转自:http://blog.csdn.net/lianghongge/article/details/42120751

           http://www.oschina.net/code/snippet_1864608_37835

 

通过httpclient的上传文件,可以处理跨域上传的问题,比如先上传到A服务器的某个临时文件目录下(临时目录下的文件,可以定时清理,通过编写shell(参考此篇),或者使用spring-quartz(参考此篇)等),然后再将文件传给其他域下的B服务,B服务处理成功后,将相对路径等信息传给A服务,A服务再保存相对路径,也可以处理预览图片等。

 

代码1:

 

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
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.CharsetUtils;
import org.apache.http.util.EntityUtils;

/**
 * 
 */

/**
 * @author zhzh 2015-3-31
 */
public class Main {

	/**
	 * @param args
	 * @throws ClassNotFoundException
	 */
	public static void main(String[] args) throws ClassNotFoundException {
		try {
			postFile();
		} catch (ParseException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 上传文件
	 * 
	 * @throws ParseException
	 * @throws IOException
	 */
	public static void postFile() throws ParseException, IOException {
		CloseableHttpClient httpClient = HttpClients.createDefault();
		try {
			// 要上传的文件的路径
			String filePath = new String("C:\\Users\\zz\\Desktop\\diqu.png");
			// 把一个普通参数和文件上传给下面这个地址 是一个servlet
			HttpPost httpPost = new HttpPost(
					"http://11.2.2.223:8081/auth_center/upload");
			// 把文件转换成流对象FileBody
			File file = new File(filePath);
			FileBody bin = new FileBody(file);
			/*StringBody uploadFileName = new StringBody("my.png",
					ContentType.create("text/plain", Consts.UTF_8));*/
			// 以浏览器兼容模式运行,防止文件名乱码。
			HttpEntity reqEntity = MultipartEntityBuilder.create()
					.setMode(HttpMultipartMode.BROWSER_COMPATIBLE)
					.addPart("uploadFile", bin) // uploadFile对应服务端类的同名属性<File类型>
					//.addPart("uploadFileName", uploadFileName)// uploadFileName对应服务端类的同名属性<String类型>
					.setCharset(CharsetUtils.get("UTF-8")).build();

			httpPost.setEntity(reqEntity);

			System.out.println("发起请求的页面地址 " + httpPost.getRequestLine());
			// 发起请求 并返回请求的响应
			CloseableHttpResponse response = httpClient.execute(httpPost);
			try {
				// 打印响应状态
				System.out.println(response.getStatusLine());
				// 获取响应对象
				HttpEntity resEntity = response.getEntity();
				if (resEntity != null) {
					// 打印响应长度
					System.out.println("Response content length: "
							+ resEntity.getContentLength());
					// 打印响应内容
					System.out.println(EntityUtils.toString(resEntity,
							Charset.forName("UTF-8")));
				}
				// 销毁
				EntityUtils.consume(resEntity);
			} finally {
				response.close();
			}
		} finally {
			httpClient.close();
		}
	}

	/**
	 * 下载文件
	 * 
	 * @param url
	 *            http://www.xxx.com/img/333.jpg
	 * @param destFileName
	 *            xxx.jpg/xxx.png/xxx.txt
	 * @throws ClientProtocolException
	 * @throws IOException
	 */
	public static void getFile(String url, String destFileName)
			throws ClientProtocolException, IOException {
		// 生成一个httpclient对象
		CloseableHttpClient httpclient = HttpClients.createDefault();
		HttpGet httpget = new HttpGet(url);
		HttpResponse response = httpclient.execute(httpget);
		HttpEntity entity = response.getEntity();
		InputStream in = entity.getContent();
		File file = new File(destFileName);
		try {
			FileOutputStream fout = new FileOutputStream(file);
			int l = -1;
			byte[] tmp = new byte[1024];
			while ((l = in.read(tmp)) != -1) {
				fout.write(tmp, 0, l);
				// 注意这里如果用OutputStream.write(buff)的话,图片会失真,大家可以试试
			}
			fout.flush();
			fout.close();
		} finally {
			// 关闭低层流。
			in.close();
		}
		httpclient.close();
	}

}

 代码2:

   

/***
	 * 上传图片操作
	 * @param request
	 * @param response
	 * @return
	 * @throws IllegalStateException
	 * @throws IOException
	 */
	@SuppressWarnings({ "rawtypes", "null" })
	@RequestMapping(value = "upload", produces = "text/plain;charset=UTF-8")
	@ResponseBody
	public String ajaxUpload(HttpServletRequest request, HttpServletResponse response) throws IllegalStateException,
			IOException {
		MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
		String rootPath = request.getSession().getServletContext().getRealPath("/");
		String fileName = "";
		String path = rootPath+"/resource/template/";
		for (Iterator it = multipartRequest.getFileNames(); it.hasNext();) {
			String key = (String) it.next();
			MultipartFile mulfile = multipartRequest.getFile(key);
			fileName = mulfile.getOriginalFilename();
			File file = new File(path + fileName);
			mulfile.transferTo(file);
		}
		JSONObject o = new JSONObject();
		o.put("fileName", "/resource/template/"+fileName);
		return o.toString();
	}

 

结果:文件上传到服务器后,返回信息打印如下

 

发起请求的页面地址 POST http://11.2.2.223:8081/auth_center/upload HTTP/1.1

HTTP/1.1 200 OK

Response content length: 42

{"fileName":"/resource/template/diqu.png"}

httpclient4.3 上传下载文件

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
自备忘一个 1、加入 JAR 包 以 JFinal 官方提供的 jfinal_demo 实例为基础。 首先在 lib 目录下加入
个人原创地址: http://www.phpthinking.com/archives/332 一、文件的上传 1、客户端设置: (1)、
最近公司培训,所以收集整理了一些关于上传下载的资料,进行了整理与大家分享。 Struts对文件上传的
一:服务端:一个普通java web工程 package com.wzh.file; import com.sun.xml.ws.developer.Stream
最近在写一个文件上传下载的服务端和客户端,在开发之前把交互流程大概设计了一下顺便分享出来,流程
1. 创建一个保存文件的表,然后rake db:migrate同步到数据库 class CreatePictures < ActiveRecord
相关jar包: 导入文件上传下载组件的jar包 commons-fileupload-1.3.jar commons-io-2.4.jar Spring
借助securtCRT,使用linux命令sz可以很方便的将服务器上的文件下载到本地,使用rz命令则是把本地文
Struts2下多文件的上传与下载 Googel 标签: 多文件 ; 上传 ; 下载 ; 随意文件 ; java ; Struts2 ;
新手初学,分享下经验,有不足的地方请多指点: 首先实现jsp页面上传附件: 页面文件关键代码 <t
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号