跳至主要內容

文件上传之Content-Type

zheng大约 2 分钟java基础文件上传

1、Content-Type介绍

Content-Type是指http/https发送信息至服务器时的内容编码类型,contentType用于表明发送数据流的类型,服务器根据编码类型使用特定的解析方式,获取数据流中的数据。

在网络请求中,常见的Content-Type有:

1.1、常见的页面资源类型

text/html,text/plain,text/css,text/javascript,image/jpeg,image/png,image/gif等;

常见的页面提交或上传文件类型	

application/x-www-form-urlencoded,multipart/form-data,application/json,application/xml等。

1.2、form表单可以定义enctype属性,该属性是发送到服务器之前应该如何对表单数据进行编码

(1)默认为application/x-www-form-urlencoded编码(包含POST和GET)

		其中:数据会变成key1=value1&key2=value2的形式;

					有特殊字符需要utf-8;

					请求类型为GET时,格式化后的字符串直接拼接到url的后面;

					请求类型为POST时,格式化后的字符串会放在http body的Form Data中发送。

(2)multipart/form-data

		其中:使用表单上传文件时必须指定enctype属性值为multipart/form-data;

					请求体被分割成多部分,每部分使用 --boundary分割(分成小部分?查其他资料)

此处为form方式文件上传后端接收demo:

@PostMapping(value="/publish")
public void formUpload(@RequestParam("programImg") CommonsMultipartFile file){

		String programImgName =  file.getOriginalFilename();		
        byte[] fileData =  file.getBytes();
}
(3)application/json

		和form类似,json可以比formData的数据结构更加复杂

		文件上传可以把文件编码成Base64,使用键值方式上传

此处为json方式文件上传后端接收demo:

@PostMapping(value = "/upload")
public void jsonUpload(@RequestBody HashMap<String, String> requestMap) {
    
        String fileData = requestMap.get("fileData");
        String fileName = requestMap.get("fileName");
        // 此处前端上传的Base64后端无法直接解开,因为它的串包含一个头,需要把头去掉。
		fileData = StringUtils.split(fileData, ",")[1];
        byte[] buffer = new BASE64Decoder().decodeBuffer(fileData);
}
上次编辑于:
贡献者: 郑天祺