1.文件批量上传
@ApiOperation(value = "文件批量上传")
@PostMapping("/multipleImageUpload")
@Transactional(rollbackFor = Exception.class)
public Result multipleImageUpload(@ApiParam(name = "files",value = "文件",required = true) @RequestParam("files") MultipartFile[] files) {
System.out.println("上传的图片数"+files.length);
List<String> imageList = new ArrayList<>();
for (MultipartFile file : files) {
if (!file.getContentType().startsWith("image/")) {
return new Result(4000, "只允许上传图片文件");
}
String filename = file.getOriginalFilename();
String uploadUrl = OssUtils.upload(file,filename);
imageList.add(uploadUrl);
}
if (imageList.isEmpty()){
return new Result(4001,"您未上传图片");
}
return new Result(2000,"图片批量上传成功",imageList);
}
1.1多文件上传时使用数组 MultipartFile[ ] files
其中要加上@RequestParam("files") files 要和 参数列表中的参数名称一致
这类似于springMVC架构 添加web 依赖
若传入文件 会把请求头改为 multipart
1.2大坑
由于swagger2.xx 版本 不支持多文件上传,仅支持单文件上传,多文件上传时会报错 500
2.使用时间戳进行oss上传
public static String upload(MultipartFile file, String path) {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, secretAccessKey);
try {
//创建唯一图片名称 + 唯一的时间戳
String timeStampPath = addTimeStampToPath(path);
// 创建PutObject请求。
ossClient.putObject(bucketName, timeStampPath, file.getInputStream());
String url = ossUrl + "/" + timeStampPath;
return url;
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
才开始我企图对url 进行操作 后来才发现没有啥卵用
因为主要是通过这里面的路径来连接的
2.1进行时间戳的拼接
private static String addTimeStampToPath(String path) {
String fileName = path;
//获取文件拓展名
String extension = "";
int dotIndex = path.lastIndexOf(".");
if(dotIndex > 0){
extension = path.substring(dotIndex);
fileName = path.substring(0,dotIndex);
}
//获取当前时间戳
String timeStamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
return fileName +"_"+ timeStamp + extension;
}
返回的时文件名+时间戳
3.近日发现的一些bug
3.1当我的状态为0时,一查询就会查出来所有的状态值
本来是这样写的,if test ="status != null and status != '' " 这样的话传入0就会查找所有的值
why?
想想原因应该是这样的 : 当你加入 status != "" 时,mybatis 可能会把status 判定为字符串。那 0 就是空 直接省略该选项