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)
2public ResponseObject<?> upload(@RequestParam(value="file", required = true)MultipartFile file,HttpServletRequest request){
3 String destination = "/filePath/" + OriginalFilename();inputtypefile不上传文件
4 File file = new File(destination);
5 ansferTo(file);
6 }
2,针对raw与binary⽅式上传,servlet后端接收写法
1 @RequestMapping(value = "/upload", method = RequestMethod.POST)
2public ResponseObject<?> upload(MultipartFile multipartFile, HttpServletRequest request) { 3try {
4 InputStream in = InputStream();
5 String disposition = Header("Content-Disposition");
6 String fileName = null;
7if (disposition != null && disposition.length() > 0) {
8 fileName = placeFirst("(?i)^.*filename=\"?([^\"]+)\"?.*$", "$1");
9 }
10if (fileName == null || fileName.length() <= 0)
11 fileName = new String("d:\\d");
12 FileOutputStream fos = new FileOutputStream(fileName);
13byte[] b = new byte[1024];
14int length;
15while ((length = in.read(b)) > 0) {
16 fos.write(b, 0, length);
17 }
18 in.close();
19 fos.close();
20 } catch (Exception e) {
21 ("file upload error", e);
22 }
23 }
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论