zoukankan      html  css  js  c++  java
  • http文件上传方式

    一、http的四种请求参数

    http四种请求参数方式:即form-data、x-www-form-urlencoded、raw、binary

    1,form-data

      http请求中的multipart/form-data,它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。当上传的字段是文件时,会有Content-Type来说明文件类型;content-disposition,用来说明字段的一些信息;由于有boundary隔离,所以multipart/form-data既可以上传文件,也可以上传键值对,它采用了键值对的方式,所以可以上传多个文件。

    2,x-www-form-urlencoded

      就是application/x-www-from-urlencoded,会将表单内的数据转换为键值对,比如,name=java&age = 23

    3,raw

      可以上传任意格式的文本,可以上传text、json、xml、html等

    4,binary

      相当于Content-Type:application/octet-stream,从字面意思得知,只可以上传二进制数据,通常用来上传文件,由于没有键值,所以,一次只能上传一个文件。如果想要同时传文件名,可以借用请求头“Content-Disposition”,设置文件名。

    二、http三种上传方式

    http三种上传方式:根据上述四种参数请求方式,其中urlencoded只能传输文本,因此http只有三种文件上传方式,form-data、raw、binary

    1,针对form-data上传,springMVC后端接收写法

    1 @RequestMapping(value="/upload", method = RequestMethod.POST)
    2 public ResponseObject<?> upload(@RequestParam(value="file", required = true)MultipartFile file,HttpServletRequest request){
    3     String destination = "/filePath/"  + multipartFile.getOriginalFilename();
    4     File file = new File(destination);
    5     multipartFile.transferTo(file);
    6 }

    2,针对raw与binary方式上传,servlet后端接收写法

     1 @RequestMapping(value = "/upload", method = RequestMethod.POST)
     2 public ResponseObject<?> upload(MultipartFile multipartFile, HttpServletRequest request) {
     3     try {
     4         InputStream in = request.getInputStream();
     5         String disposition = request.getHeader("Content-Disposition");
     6         String fileName = null;
     7         if (disposition != null && disposition.length() > 0) {
     8             fileName = disposition.replaceFirst("(?i)^.*filename="?([^"]+)"?.*$", "$1");
     9         }
    10         if (fileName == null || fileName.length() <= 0)
    11             fileName = new String("d:\abcdef.xed");
    12         FileOutputStream fos = new FileOutputStream(fileName);
    13         byte[] b = new byte[1024];
    14         int length;
    15         while ((length = in.read(b)) > 0) {
    16             fos.write(b, 0, length);
    17         }
    18         in.close();
    19         fos.close();
    20     } catch (Exception e) {
    21         logger.error("file upload error", e);
    22     }
    23 }

     

  • 相关阅读:
    Codeforces Round #439 (Div. 2)
    Money Systems
    Stamps
    inflate
    多重背包问题
    AIM Tech Round 4 (Div. 2)
    September Challenge 2017
    树的重心
    百度之星2017初赛A
    树上的最大独立集
  • 原文地址:https://www.cnblogs.com/guanghe/p/14790293.html
Copyright © 2011-2022 走看看