侧边栏壁纸
  • 累计撰写 27 篇文章
  • 累计创建 42 个标签
  • 累计收到 33 条评论

目 录CONTENT

文章目录

阿里云OSS上传文件集成

miykah
2023-10-17 / 0 评论 / 1 点赞 / 49 阅读 / 5692 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2023-12-11,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

整合阿里云OSS,项目中有需要用到文件上传(如头像上传)等需求,则可以使用。

参考资料:https://juejin.cn/post/6984700528546545700?from=search-suggest#comment

创建 Bucket

如图设置,读写权限选择公共读

image-20231017111317098

获取几个必需的参数

  1. endpoint:地域节点,如 oss-cn-chengdu.aliyuncs.com

  2. accessKeyId、accessKeySecret:在个人中心的AccessKey中获取

  3. bucketName:创建的桶名称

  4. dirPrefix:可以设置一个保存文件的文件目录前缀,比如项目名字

添加依赖

添加阿里云OSS的maven依赖

<!--    阿里云 oss    -->
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.10.2</version>
</dependency>

修改 application.yml 文件添加参数

将必需的参数添加到配置文件中,方便获取

aliyun:
  oss:
    # oss对外服务的访问域名
    endpoint: oss-cn-chengdu.aliyuncs.com
    # 访问身份验证中用到用户标识
    accessKeyId: LTAI5t*******
    # 用户用于加密签名字符串和oss用来验证签名字符串的密钥
    accessKeySecret: d6N7***********
    # oss的存储空间
    bucketName: miykah-project
    # 上传文件大小(M)
    maxSize: 5
    # 上传文件夹路径前缀
    dir:
      prefix: ojsystem

创建配置类 AliyunOssClientConfig

创建一个配置类 AliyunOssClientConfig.java,获取配置文件中的参数,并创建一个 OSSClient 的 bean 到容器中。

@Configuration
@ConfigurationProperties(prefix = "aliyun.oss")
@Data
public class AliyunOssClientConfig {
​
    private String endpoint;
    private String accessKeyId;
    private String accessKeySecret;
​
    @Bean
    public OSSClient ossClient() {
        return (OSSClient) new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    }
​
}

创建 Controller 和 Service

Controller

@RestController
@RequestMapping("/aliyunOss")
@Slf4j
public class OssController {
​
    @Resource
    private OssService ossService;
​
    @PostMapping("/uploadImage")
    public BaseResponse<String> uploadImage(@RequestParam("file") MultipartFile file) {
        InputStream inputStream = null;
        try {
            inputStream = file.getInputStream();
        } catch (IOException e) {
            log.error(e.getMessage());
        }
        String url = ossService.uploadImage(inputStream, file.getOriginalFilename());
        return ResultUtils.success(url);
    }
​
}

Service接口及实现类

public interface OssService {
​
    String uploadImage(InputStream inputStream, String originalFilename);
​
}
@Service
public class OssServiceImpl implements OssService {
​
    @Value("${aliyun.oss.endpoint}")
    private String endpoint;
​
    @Value("${aliyun.oss.maxSize}")
    private int maxSize;
​
    @Value("${aliyun.oss.bucketName}")
    private String bucketName;
​
    @Value("${aliyun.oss.dir.prefix}")
    private String dirPrefix;
​
    @Resource
    private OSSClient ossClient;
​
    @Override
    public String uploadImage(InputStream inputStream, String originalFilename) {
​
        String folder = DateUtil.today();
        String fileName = UUID.randomUUID().toString();
        String fileExtension = originalFilename.substring(originalFilename.lastIndexOf("."));
        // oss中的文件名:ojsystem/日期/文件.扩展名
        String objectName = dirPrefix + "/" + folder + "/" + fileName + fileExtension;
​
        // 创建上传文件的元信息,可以通过文件元信息设置HTTP header(设置了才能通过返回的链接直接访问)。
        //如果不设置,直接访问url会自行下载图片,看各位自己选择
        ObjectMetadata objectMetadata = new ObjectMetadata();
        objectMetadata.setContentType("image/jpg");
​
        ossClient.putObject(bucketName, objectName, inputStream, objectMetadata);
​
        String url = "http://" + bucketName + "." + endpoint + "/" + objectName;
​
        return url;
    }
}

测试接口

使用 Postman 进行测试,上传成功后,返回了 oss 中的 url

image-20231017112342407

image-20231017112355203

1

评论区