1. 首先multipart/form-data(主要是上传文件),必须要使用post方式才可以请求到;
2. 并且所有的文件和参数在HttpServletRequest 中拿到
文件接受代码:
public static Map<String, String> reciveImageAndParams(HttpServletRequest request, String imageType, String uuid)
throws Exception {
Map<String, String> uri = new HashMap<>();
log.info("上传图片");
DateFormat format = new SimpleDateFormat("yyyy-MM");
String time = format.format(new Date());
String tempPathDir = "";
File tempPathDirFile = new File(tempPathDir);
String realDir = "product/" + imageType + "/" + time + "/" + uuid;
try {
//文件上传的三部曲
//创建工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置缓冲区大小,这里是400kb
factory.setSizeThreshold(4096 * 100);
// 设置缓冲区目录
factory.setRepository(tempPathDirFile);
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
//设置上传文件的大小 12M
upload.setSizeMax(4194304 * 3);
//创建解析器 // 得到所有的文件
List<FileItem> items = upload.parseRequest(request);
Iterator<FileItem> i = items.iterator();
while (i.hasNext()) {
FileItem fi = i.next();
// false表示文件 否则字段
if (!fi.isFormField()) {
String fileName = fi.getName();
if (fileName != null) {
// 这里加一个限制,如果不是图片格式,则提示错误. (gif,jpg,jpeg,bmp,png)
String suffixName = FilenameUtils.getExtension(fileName);
if ("jpg".equalsIgnoreCase(suffixName) || "jpeg".equalsIgnoreCase(suffixName)
|| "png".equalsIgnoreCase(suffixName)) {
// 文件名
DateFormat format2 = new SimpleDateFormat("yyyyMMddHHmmss");
String baseName = FilenameUtils.getBaseName(fileName);
String dirFileUri = realDir + "/" + baseName + format2.format(new Date()) + "." +
suffixName;
QiNiuFileUp.byteUpoad(fi.get(), dirFileUri);
// baseName文件名字 dirFileUri上传的到七牛云的key
log.info("key:{}", fi.getFieldName());
uri.put(fi.getFieldName(), dirFileUri);
} else {
throw new ProcureException("文件格式不正确");
}
}
} else {
fi.getString("UTF-8");
uri.put(new String(fi.getFieldName().getBytes("iso-8859-1"), "utf-8"),
new String(fi.getString().getBytes("iso-8859-1"), "utf-8"));
}
}
return uri;
} catch (ProcureException e) {
log.error("上传图片失败", e, ImageUploadUtil.class);
throw e;
} catch (FileUploadException e) {
throw new ProcureException("request文件接收失败");
} catch (UnsupportedEncodingException e) {
log.error("乱码解决失败");
throw e;
}
}
2021年08月03日09:04:52更新:
在控制层直接使用MultipartFile类型接参即可。
1. 单独接(也可以使用@RequestParam):
2. 封装到对象中:
因为前段传文件(文件流)只能form-data即form表单形式接参,不是Json形式,不可以加@RequestBody注解,@Validated是参数校验注解,可加可不加。