1. 程式人生 > >HttpGlient上傳

HttpGlient上傳

  • Client除了能夠進行普通的引數提交處理之外,還可以進行檔案的上傳處理
  • 在HelloProject專案中定義一個處理檔案上傳的Servlet,本次使用SmartUpload元件處理上傳操作
  • 此次沒有真正進行上傳操作,而只是將檔案儲存的位置輸出,
package shu.mao.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.
http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.jspsmart.upload.SmartUpload; import com.jspsmart.upload.SmartUploadException; @WebServlet("/UploadServlet") public class UploadServlet extends HttpServlet { @Override protected void
doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); //上傳檔案的工具元件 SmartUpload smartupload = new SmartUpload(); smartupload.initialize(super.getServletConfig(), request,
response); try { smartupload.upload(); } catch (SmartUploadException e) { e.printStackTrace(); } //如果有檔案上傳 if(smartupload.getFiles().getSize() >0){ //定義檔案儲存名稱 String fileName = java.util.UUID.randomUUID()+smartupload.getFiles().getFile(0).getFileExt(); //定義檔案儲存地址 String filePath = request.getServletContext().getRealPath("/upload/"+fileName); //如果成功輸出上傳檔案路徑,就表示上傳成功 System.out.println(filePath); } System.out.println("msg = "+smartupload.getRequest().getParameter("msg")); } }
  • 在ClientProject專案之中定義一個UploadDemo類進行本地磁碟檔案的上傳操作,將本地D盤中的一張圖片通過訪問/UploadServlet進行上傳

package shu.xie.demo;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;

import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.HttpClients;

public class UploadDemo {
	public static void main(String[] args)throws Exception{
		File photo = new File("d:"+File.separator+"photo.jpg");
		String url = "http://localhost:8080/HelloProject/UploadServlet";
		HttpClient client = HttpClients.createDefault();
		HttpPost  post = new HttpPost(url);
		
		//如果上傳檔案一定要使用到multipart/form-data
		MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
		//新增提交內容
		entityBuilder.addPart("photo",new FileBody(photo, ContentType.create("image/jpeg")));
		entityBuilder.addPart("msg",new StringBody("你好,世界",ContentType.create("text/plain", Consts.UTF_8)));
		
		HttpEntity entity = entityBuilder.build();
		post.setEntity(entity);
		
		//執行post請求之後得到一個迴應物件
		HttpResponse httpResponse = client.execute(post);
		//控制檯輸出服務端迴應的內容
		System.out.println(httpResponse.getEntity());
		//輸出當前狀態數字程式碼(200表示請求成功)
		System.out.println(httpResponse.getStatusLine().getStatusCode());
		//輸出迴應內容
		InputStream input = httpResponse.getEntity().getContent();
		ByteArrayOutputStream bos = new ByteArrayOutputStream();
		byte[] data = new byte[1024];
		int x = 0;
		while((x=input.read(data)) != -1){
			bos.write(data,0,x);
		}
		System.out.println(new String(bos.toByteArray()));
	}
	
}
  • 上傳元件的時候一定是使用multipart/form-data進行封裝表單,在HttpClient元件中可以使用MultipartEntityBuilder 工廠類設定內容
  • Tomcat輸出結果

在這裡插入圖片描述