最近公司的手机项目需要模仿微信的朋友圈,大概就是拍个照片,写段文字,点击发布。我这里负责把图片上传到云平台,文字存到数据库,这个小项目是用来接收c++传来的二进制流并把流转换成图片。用到了servlet3.0 API
第一个servlet是用来上传文件的
第二个service是用来截取filename的
- package servlet;
- import java.io.IOException;
- import java.util.Collection;
- import javax.servlet.ServletException;
- import javax.servlet.annotation.MultipartConfig;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.Part;
- import service.Service;
- @SuppressWarnings("serial")
- @WebServlet(urlPatterns={"/upload"})
- @MultipartConfig(fileSizeThreshold=99999990,location="D:/temp",maxFileSize=1024*1024*1024,maxRequestSize=100000000)
- public class UploadServlet extends HttpServlet {
- private Service service = new Service();
-
- public void service(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- /**获取上传文件的封装对象集合parts*/
- Collection<Part>parts=request.getParts();
- /**分别处理每一个part*/
- for(Part part:parts){
- /**获取part名字*/
- String partName=part.getName();
- /**如果该名字等于file,c++是会把表单名文件字段的name设置成file的*/
- if(partName.equals("file")){
- /**获取content-disposition消息头,这里获取之后是一大串字符串,需要经过处理才能获取文件名*/
- String header = part.getHeader("content-disposition");
- /**用service获取文件名*/
- String filename=service.getFileName(header);
- /**输出文件名*/
- System.out.println(filename==null?"":filename);
- /**写入目标文件夹
- * 要注意的是,如果不在开头写location,必须要写存放文件的文件夹的绝对路径,否则就只要
- * 写文件名即可成都网络推广
- * */
- part.write(filename);
- }
- /**获取字段名,输出字段值*/
- if(partName.equals("title")){
- String value=request.getParameter(partName);
- System.out.println(value);
- }
- }
- }
- }
- package service;
- public class Service {
- public String getFileName(String header){
- /**这个如果不是用来接受来自html表单的文件的话是不用写的*/
- if(header.contains("filename=\"\"")){
- return null;
- }
- StringBuilder sb=new StringBuilder(header);
- /**StringBuilder截取文件名,如果有更高效的方法请提供*/
- return sb.delete(0, sb.indexOf("filename=\"")).substring(sb.indexOf("\"")+1, sb.lastIndexOf("\""));
- }
- public static void main(String[] args) {
- String c="form-data; name=\"file\"; filename=\"12.txt\"";
- System.out.println(new Service().getFileName(c));
- }
- }