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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
2018-05-20 Java代码块
2018-05-20 eclipse修改项目默认编码为UTF-8