HttpGlient上傳
阿新 • • 發佈:2018-12-22
- 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輸出結果