前端代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/batchUpload" method="post" enctype="multipart/form-data">
<label >多文件上传</label>
<input type="file"name="files" multiple/>
<input type="submit" value="上传"/>
</form>
</body>
</html>
controller层代码
@PostMapping("/batchUpload")
public String upload(@RequestPart("files") MultipartFile file){
// 获取用户身份信息
COSCredentials credentials = new BasicCOSCredentials(cosConfig.getSecretId(),cosConfig.getSecretKey());
// 配置region
ClientConfig clientConfig = new ClientConfig(new Region(cosConfig.getRegion()));
// 生成COS客户端
COSClient cosclient = new COSClient(credentials, clientConfig);
String newFileName = UUID.randomUUID().toString()+file.getOriginalFilename();
File localFile = null;
try {
localFile = File.createTempFile("temp",null);
file.transferTo(localFile);
// 指定要上传到 COS 上的路径
String key = "/"+new Date().toString()+ "/"+newFileName;
PutObjectRequest putObjectRequest = new PutObjectRequest(cosConfig.getBucketName(), key, localFile);
PutObjectResult putObjectResult = cosclient.putObject(putObjectRequest);
return "上传成功:"+cosConfig.getUrl()+key;
} catch (IOException e) {
return "上传失败";
}finally {
// 关闭客户端(关闭后台线程)
cosclient.shutdown();
}
}
上网搜索发现有两种情况
- 表单提交没有设置enctype=“multipart/form-data”
- 注解使用错误,要使用
@RequestPart(“前端所写的name”)
或者
@RequestParam(“f前端所写的name”)
如果没有写name前端会找不到参数报400错误
但是我以上哪种都不属于
我的错误在于文件的input多写了一个multiple,本来想测完单文件测多文件,就没在意,结果一失足成千古恨。