前端上傳文件
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