• 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输出结果

\"在这里插入图片描述\"

收藏 打印