JSON是一种轻量级数据交互格式,而multipart/form-data是HTTP POST请求时常用的一种数据格式。multipart/form-data支持传输文件,但是JSON却没有直接传输文件的能力,那么如何利用JSON来传输文件呢?
实际上我们可以使用Base64来将文件转换成文本格式,然后将这段文本嵌入到JSON数据中。这样就可以在JSON中传输文件了。
{
"file": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEA..."
}
在服务器接收到JSON后,可以将Base64字符串转换成文件。Java代码如下:
@PostMapping("/upload")
public String upload(@RequestBody FileDTO fileDTO) throws IOException {
String base64Str = fileDTO.getFile().split(",")[1];
byte[] bytes = Base64.getDecoder().decode(base64Str);
Path path = Paths.get("uploads/" + fileDTO.getFileName());
Files.write(path, bytes);
return "上传成功";
}
其中,FileDTO是一个简单的Java类,用于封装文件名和Base64字符串。代码如下:
public class FileDTO {
private String fileName;
private String file;
// 省略 getter 和 setter
}
注意,在将Base64字符串转换成文件时,需要先通过split()方法将"data:image/jpeg;base64,"等前缀去掉。代码中使用的是", "作为分隔符。
以上就是在JSON中传输文件的简单实现方法。