王柳 发表于 2024-8-17 12:05:33

文件批量上传,oss使用时间戳解决同名问题 以及一些sql bug

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 依赖https://i-blog.csdnimg.cn/direct/e2055bbe9e894adf919efec54351110a.png
若传入文件 会把哀求头改为 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 进行操纵 厥后才发现没有啥卵用 
由于主要是通过这里面的路径来毗连的 https://i-blog.csdnimg.cn/direct/02149d392baf4cf7b02b125c379ac90e.png
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时,一查询就会查出来所有的状态值https://i-blog.csdnimg.cn/direct/d9450e1def4a4ccdb2645496f4d0afa4.png

本来是这样写的,if test ="status != null and status != '' " 这样的话传入0就会查找所有的值 
why?
想想缘故起因应该是这样的 : 当你加入 status != "" 时,mybatis 大概会把status 判定为字符串。那 0 就是空 直接省略该选项 
3.2条件查询时已添加不查询下架的条件 但仍能查询到 

https://i-blog.csdnimg.cn/direct/4804e78d985f4a56ad911d63c755db9a.png


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 文件批量上传,oss使用时间戳解决同名问题 以及一些sql bug