阿里云OSS图片上传,并通过返回的Url直接访问图片

获取yml配置文件的中的endpoint、accessKeyId、accessKeySecret、bucketName

aliyun:
 oss:
  endpoint: oss-cn-hangzhou.aliyuncs.com
  accessKeyId: 改成自己的id
  accessKeySecret: 改成自己的秘钥
  bucketName: mall-qsd
  @Value("${aliyun.oss.endpoint}")
  private String ALIYUN_OSS_ENDPOINT;
  @Value("${aliyun.oss.accessKeyId}")
  private String ALIYUN_OSS_ACCESSKEYID;
  @Value("${aliyun.oss.accessKeySecret}")
  private String ALIYUN_OSS_ACCESSKEYSECRET;
  @Value("${aliyun.oss.bucketName}")
  private String ALIYUN_OSS_BUCKETNAME;

 

  public String uploadFile(MultipartFile file) throws IOException {
      OSSClient ossClient = new OSSClient(ALIYUN_OSS_ENDPOINT, ALIYUN_OSS_ACCESSKEYID, ALIYUN_OSS_ACCESSKEYSECRET);
      SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
      // 获取文件名
      String fileName = multipartFile.getOriginalFilename();
      // 获取文件后缀名
      String suffixName = fileName.substring(fileName.lastIndexOf("."));
      // 最后上传生成的文件名
      String finalFileName = System.currentTimeMillis() + "" + new SecureRandom().nextInt(0x0400) + suffixName;
      // oss中的文件夹名
      String objectName = sdf.format(new Date()) + "/" + finalFileName;
      // 创建上传文件的元信息,可以通过文件元信息设置HTTP header(设置了才能通过返回的链接直接访问)。
      ObjectMetadata objectMetadata = new ObjectMetadata();
      objectMetadata.setContentType("image/jpg");
      // 文件上传
      ossClient.putObject(ALIYUN_OSS_BUCKETNAME, objectName, new ByteArrayInputStream(multipartFile.getBytes()),objectMetadata);
      // 设置URL过期时间为1小时。
      Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);
      String url = ossClient.generatePresignedUrl(ALIYUN_OSS_BUCKETNAME, objectName, expiration).toString();
      ossClient.shutdown();
      log.info("阿里云OSS的文件url:{}", url);
      return url;
  }

转载:https://blog.csdn.net/qsd1530/article/details/106928947

posted @ 2022-07-22 15:53  Lafite-1820  阅读(3403)  评论(0编辑  收藏  举报