HttpClient上传文件


使用HttpClient上传文件

<dependency>
	<groupId>org.apache.httpcomponents</groupId>
	<artifactId>httpclient</artifactId>
	<version>4.5.12</version>
</dependency>
<dependency>
	<groupId>org.apache.httpcomponents</groupId>
	<artifactId>httpmime</artifactId>
	<version>4.5.12</version>
</dependency>


方式一:

public static String sendPostFile(String url, String fileName , Map<String,String> headers) {
	try {
		CloseableHttpClient httpclient = HttpClients.createDefault();
		HttpPost httpPost = new HttpPost(url);
		
		MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
		//设置参数
		File file = new File(fileName);
		multipartEntityBuilder.addBinaryBody("file",file);
		multipartEntityBuilder.addTextBody("comment", "this is comment");
		
		HttpEntity httpEntity = multipartEntityBuilder.build();
		httpPost.setEntity(httpEntity);
		
		RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(200000).setSocketTimeout(200000).build();
		httpPost.setConfig(requestConfig);
		
		// 请求头
		if (headers != null && headers.size() > 0) {
			Iterator<String> iterator = headers.keySet().iterator();
			while (iterator.hasNext()) {
				String key = iterator.next();
				String value = (String) headers.get(key);
				if (key != null && !"".equals(value)) {
					httpPost.setHeader(key, value);
				}
			}
		}
		
		CloseableHttpResponse execute = httpclient.execute(httpPost);
		int statusCode = execute.getStatusLine().getStatusCode();
		if (statusCode == 200) {
			HttpEntity entity = execute.getEntity();
			String string = EntityUtils.toString(entity);
			return string;
		}
	} catch (IOException e) {
		e.printStackTrace();
	}
	
	return null;
}


方式二:

public static String sendPostFile3(String url, String fileName , Map<String,String> headers) {
	try {
		CloseableHttpClient httpclient = HttpClients.createDefault();
		HttpPost httpPost = new HttpPost(url);
	
		// 参数
		FileBody file = new FileBody(new File(fileName));
		StringBody comment = new StringBody("This is comment", ContentType.TEXT_PLAIN); 
		
		HttpEntity httpEntity = MultipartEntityBuilder.create()
				.addPart("file",file)
				.addPart("comment",comment)
				.build();
		
		httpPost.setEntity(httpEntity);
		
		RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(200000).setSocketTimeout(200000).build();
		httpPost.setConfig(requestConfig);
		
		// 设置请求头信息
		if (headers != null && headers.size() > 0) {
			Iterator<String> iterator = headers.keySet().iterator();
			while (iterator.hasNext()) {
				String key = iterator.next();
				String value = (String) headers.get(key);
				if (key != null && !"".equals(value)) {
					httpPost.setHeader(key, value);
				}
			}
		}

		CloseableHttpResponse execute = httpclient.execute(httpPost);
		int statusCode = execute.getStatusLine().getStatusCode();
		if (statusCode == 200) {
			HttpEntity entity = execute.getEntity();
			String string = EntityUtils.toString(entity);
			return string;
		}
	} catch (IOException e) {
		e.printStackTrace();
	}

	return null;
}



数据接收:

import java.io.File;
import java.io.FileOutputStream;

import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

@Controller
public class UploadTest {
	
	/**
	发送请求时指定了名称,file和 comment,可以使用MultipartFile 接收
	也可以使用注解指定名称,如@RequestParam(name="file") MultipartFile uploadFile
	*/
	@ResponseBody
	@RequestMapping("/upload")
	public String upload(MultipartFile file , String comment) {

		try {
			System.out.println("fileLength : " + file.getSize());
			System.out.println("fileName : " + file.getOriginalFilename());
			System.out.println("comment : " + comment);
			
			file.transferTo(new File("D://" + file.getOriginalFilename()));
			
		} catch (Exception e) {
			e.printStackTrace();
		}

		return "ok";
	}
}



如果上传时没有指定名称,如下操作:

public static String sendPostFile(String url, String fileName , Map<String,String> headers) {
	try {
		CloseableHttpClient httpclient = HttpClients.createDefault();
		HttpPost httpPost = new HttpPost(url);
		
		File file = new File(fileName);
		FileEntity fileEntity = new FileEntity(file);
		httpPost.setEntity(fileEntity);
		
		/**
		 * 设置请求头信息
		 */
		if (headers != null && headers.size() > 0) {
			Iterator<String> iterator = headers.keySet().iterator();
			while (iterator.hasNext()) {
				String key = iterator.next();
				String value = (String) headers.get(key);
				if (key != null && !"".equals(value)) {
					httpPost.setHeader(key, value);
				}
			}
		}

		CloseableHttpResponse execute = httpclient.execute(httpPost);
		int statusCode = execute.getStatusLine().getStatusCode();
		if (statusCode == SUCCESS) {
			HttpEntity entity = execute.getEntity();
			String string = EntityUtils.toString(entity);
			return string;
		}
	} catch (IOException e) {
		e.printStackTrace();
	}

	return null;
}

    接收的时候就无法使用MultipartFile对象接收,只用使用数据流方式接收,文件名可以通过header传递,此种方式很不方便

import java.io.File;
import java.io.FileOutputStream;

import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

@Controller
public class UploadTest {
	
	@ResponseBody
	@RequestMapping("/upload")
	public String upload(HttpServletRequest request ) {

		try {
			int contentLength = request.getContentLength();
			System.out.println("contentLength : " + contentLength);
			
			File file2 = new File("D://" + request.getHeader("name")) ;
			FileOutputStream os = new FileOutputStream(file2) ;
			
			ServletInputStream inputStream = request.getInputStream();
	        byte[] bytes = new byte[1024];
	        int len = 0;
	        while ((len = inputStream.read(bytes)) > 0) {
	        	os.write(bytes, 0, len);
	        	os.flush();
	        }
			os.flush();
			os.close();

		} catch (Exception e) {
			e.printStackTrace();
		}

		return "ok";
	}
}




HttpClient 上传文件 MultipartFile

2021.07.10 00:19

https://www.meihaocloud.com.com/1096.html , 欢迎转载,请在文章页标出原文连接 !


Copyright © 2020 千夕网 联系站长

粤公网安备 44030302001408号 粤ICP备19099833号-1