Spring boot 中使用OSS上传

 一、阿里云选择产品对象存储OSS,并创建 Bucket。

 

  

  根据需求选择配置,bucket名称需要全局唯一,读写权限选择公开读,用于外部通过url访问到图片资源。

 二、在创建的Bucker概览中查看Endpoint,用于外部访问的前缀。

      

 三、集成到springBoot项目中

 1、引入依赖

<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.10.2</version>
</dependency>

 2、上传文件

@PostMapping("/uploadfile")
  public ResponseEntity<?> postFile(@RequestParam("file") MultipartFile file) throws IOException {
    String endpoint = "";  //bucket概览中显示的endpoint(有地域差异)
    String accessKeyId = ""; // 个人的accessKeyId
    String accessKeySecret = ""; //个人的accessKeySecret(推荐创建RAM子账号进行访问)

    // 创建OSSClient实例。
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

    String fileName = file.getOriginalFilename();
    // 获取文件的后缀名
    String extName = FileUtil.extName(fileName);
    FileUtil.mainName(fileName);
    // 生成上传文件名
    String finalFileName = randomFilePath(extName);
    byte[] bytes = file.getBytes();

    // <yourObjectName>表示上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。
    PutObjectRequest putObjectRequest = new PutObjectRequest("bucketName",
      finalFileName,new ByteArrayInputStream(bytes) ); // 自己创建的bucket名字
    
    // 上传。
    ossClient.putObject(putObjectRequest);

    // 关闭OSSClient。
    ossClient.shutdown();
    return new ResponseEntity<>("成功", HttpStatus.OK);
  }

  private String randomFilePath(String fileType) {
    return DateUtil.format(new Date(), NORM_MONTH_PATTERN)+ IdUtil.simpleUUID() + "." + fileType;
  }

 其中获取文件后缀名使用hutool工具类,hutool包含了很多常用的工具类,引入依赖

<dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>4.3.1</version>
 </dependency>

3、查看accessKeyId ,accessKeySecret 。

 

  在控制台选择右侧Access Key。

    

 

posted @ 2021-01-02 19:49  pu_xb  阅读(805)  评论(0编辑  收藏  举报