前端上传文件
1. file格式 创建formData来完成file上传<input type="file" id="imgfile" name="pic" multiple>
<script>
$("#imgfile").change(function () {
var formData = new FormData();
$.each($('#imgfile')[0].files, function (i, file) {
formData.set('upload_file'+ i, file);
});
//processData: false, contentType: false,多用来处理异步上传二进制文件。
$.ajax({
url: 'xxx',
type: 'POST',
data: formData, // 上传formdata封装的数据
dataType: 'JSON',
cache: false, // 不缓存
processData: false, // jQuery不要去处理发送的数据
contentType: false, // jQuery不要去设置Content-Type请求头
success:function (data) { //成功回调
console.log(data);
}
});
});
</script>
- base64格式
将多个base64图片直接放在数组中,JSON.stringfy();以数组的字符串格式传给后台 - Blob流格式
创建formData来完成Blob流上传
管理后台
**MultipartFile接收**MultipartFile可以接收前端file类型和blob类型的文件
SpringMVC提供的org.springframework.web.multipart.MultipartFile很强大,接收file只需要@RequestParam(value = “img”) MultipartFile file就可以了,
@Controller
@RequestMapping("/user")
public class UserController extends BaseController {
private static Logger logger = LoggerFactory.getLogger(UserController.class);
@Value(value = "${image.path:./img}")
private String imagePath;
@Value(value = "${image.host:http://localhost}")
private String imageHost;
@RequestMapping(value = "/upload/file", method = RequestMethod.POST)
@ResponseBody
public Result<String> saveFile(@RequestParam(value = "img") MultipartFile file) {
StringBuffer fileName = new StringBuffer();
fileName.append(UUID.randomUUID().toString().replaceAll("-", ""));
String type = file.getContentType();
if ("image/png".equals(type)) {
fileName.append(".png");
} else if ("image/jpeg".equals(type)) {
fileName.append(".jpeg");
} else if ("image/gif".equals(type)) {
fileName.append(".gif");
} else {
return new Result.Builder<String>()
.code(-1)
.msg("请选择.png.jpg格式的图片")
.build();
}
if (file.getSize() > 1024000L) {
return new Result.Builder<String>()
.code(-1)
.msg("图片超过1Mb")
.build();
}
try {
file.transferTo(new File(imagePath, fileName.toString()));
return new Result.Builder<String>()
.code(0)
.msg("成功")
.data(imageHost + fileName.toString())
.build();
} catch (IOException e) {
e.printStackTrace();
return new Result.Builder<String>()
.code(-1)
.msg("保存失败")
.build();
}
}
}
Base64字符串接收
@RequestMapping(value = "/upload/base64", method = RequestMethod.POST)
@ResponseBody
public Result<String> saveBase64(@RequestParam(value = "img") String base64Str) {
StringBuffer fileName = new StringBuffer();
fileName.append(UUID.randomUUID().toString().replaceAll("-", ""));
if (StringUtils.isBlank(base64Str)) {
return new Result.Builder<String>()
.code(-1)
.msg("file不可缺省")
.build();
} else if (base64Str.indexOf("data:image/png;") != -1) {
base64Str = base64Str.replace("data:image/png;base64,", "");
fileName.append(".png");
} else if (base64Str.indexOf("data:image/jpeg;") != -1) {
base64Str = base64Str.replace("data:image/jpeg;base64,", "");
fileName.append(".jpeg");
} else {
return new Result.Builder<String>()
.code(-1)
.msg("请选择.png.jpg格式的图片")
.build();
}
File file = new File(imagePath, fileName.toString());
byte[] fileBytes = Base64.getDecoder().decode(base64Str);
try {
FileUtils.writeByteArrayToFile(file, fileBytes);
} catch (IOException e) {
e.printStackTrace();
return new Result.Builder<String>()
.code(-1)
.msg("保存失败")
.build();
}
return new Result.Builder<String>()
.code(0)
.msg("成功")
.data(imageHost + fileName.toString())
.build();
}
参考:
https://blog.csdn.net/qq_34664239/article/details/94595508
https://blog.csdn.net/yimcarson/article/details/84937674