c++的传递的二进制流进行文件上传操作

来源:互联网 发布:域名云解析有什么用 编辑:程序博客网 时间:2024/05/21 19:37
java对c++的传递的二进制流进行文件上传
最近公司的手机项目需要模仿微信的朋友圈,大概就是拍个照片,写段文字,点击发布。我这里负责把图片上传到云平台,文字存到数据库,这个小项目是用来接收c++传来的二进制流并把流转换成图片。用到了servlet3.0 API

第一个servlet是用来上传文件的
第二个service是用来截取filename的
  1. package servlet;

  2. import java.io.IOException;
  3. import java.util.Collection;

  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.MultipartConfig;
  6. import javax.servlet.annotation.WebServlet;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import javax.servlet.http.Part;

  11. import service.Service;
  12. @SuppressWarnings("serial")
  13. @WebServlet(urlPatterns={"/upload"})
  14. @MultipartConfig(fileSizeThreshold=99999990,location="D:/temp",maxFileSize=1024*1024*1024,maxRequestSize=100000000)
  15. public class UploadServlet extends HttpServlet {

  16.     private Service service = new Service();
  17.      
  18.     public void service(HttpServletRequest request, HttpServletResponse response)
  19.             throws ServletException, IOException {
  20.         /**获取上传文件的封装对象集合parts*/
  21.         Collection<Part>parts=request.getParts();
  22.         /**分别处理每一个part*/
  23.         for(Part part:parts){
  24.             /**获取part名字*/
  25.             String partName=part.getName();
  26.             /**如果该名字等于file,c++是会把表单名文件字段的name设置成file的*/
  27.             if(partName.equals("file")){
  28.                 /**获取content-disposition消息头,这里获取之后是一大串字符串,需要经过处理才能获取文件名*/
  29.                 String header = part.getHeader("content-disposition");
  30.                 /**用service获取文件名*/
  31.                 String filename=service.getFileName(header);
  32.                 /**输出文件名*/
  33.                 System.out.println(filename==null?"":filename);
  34.                 /**写入目标文件夹
  35.                  * 要注意的是,如果不在开头写location,必须要写存放文件的文件夹的绝对路径,否则就只要
  36.                  * 写文件名即可成都网络推广
  37.                  * */
  38.                 part.write(filename);
  39.             }
  40.             /**获取字段名,输出字段值*/
  41.             if(partName.equals("title")){
  42.                 String value=request.getParameter(partName);
  43.                 System.out.println(value);
  44.             }
  45.         }
  46.     }
  47. }
复制代码
  1. package service;

  2. public class Service {
  3.     public String getFileName(String header){
  4.         /**这个如果不是用来接受来自html表单的文件的话是不用写的*/
  5.         if(header.contains("filename=\"\"")){
  6.             return null;
  7.         }
  8.         StringBuilder sb=new StringBuilder(header);
  9.         /**StringBuilder截取文件名,如果有更高效的方法请提供*/
  10.         return sb.delete(0, sb.indexOf("filename=\"")).substring(sb.indexOf("\"")+1, sb.lastIndexOf("\""));
  11.     }
  12.     public static void main(String[] args) {
  13.         String c="form-data; name=\"file\"; filename=\"12.txt\"";
  14.         System.out.println(new Service().getFileName(c));
  15.     }
  16. }
0 0