阿里云oss图片上传

背景

上周接到一个新的需求,要在客户端上报图片信息,以前是存在七牛上,现在要全部转到阿里云的oss上,然后那周基本都在啃阿里云的官方文档,最后完成了这个需求,现在来分享一下Java开发的SpringBoot项目怎么引入oss并且使用还有我的踩坑经历。

阿里云oss使用

1、先引入maven依赖

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

2、编写配置类获取ossClient对象

    @Value("${aliyun.oss.endpoint}")
    private String endpoint;
    @Value("${aliyun.accessKeyId}")
    private String accessKeyId;
    @Value("${aliyun.accessKeySecret}")
    private String accessKeySecret;
    @Bean
    public OSSClient ossClient() {
        return new OSSClient(endpoint, accessKeyId, accessKeySecret);
    }
  • endpoint:你的endpoint,在阿里云oss控制台可以看到
  • accessKeyId:你的AccessKey,创建bucketName就可以看到
  • accessKeySecret:你的SecretKey,创建bucketName就可以看到

3、编写上传图片的代码

    @Value("${aliyun.oss.bucketName}")
    private String bucketName;
    // urlPrefix: http://bucketName.endpoint/,bucketName喝endpoint在阿里云oss控制台都可以看到
    @Value("${aliyun.oss.urlPrefix}")
    private String urlPrefix;
    private static final String[] IMAGE_TYPE = new String[]{".jpg", ".jpeg", ".png"};
    public void add(FeedbackRequest data) {
        // 阿里云oss图片上传
        if (data.getFeedbackImgs() != null) {
            if (!data.getFeedbackImgs().isEmpty()) {
                String fileName = data.getFeedbackImgs().getOriginalFilename();
                String filePath = this.getFilePath(fileName);
                boolean isImage = false;
                for (String type : IMAGE_TYPE) {
                    if (StringUtils.endsWithIgnoreCase(fileName, type)) {
                        isImage = true;
                        break;
                if (!isImage) {
                    //格式错误
                    throw new RuntimeException("格式错误,必须是图片格式");
                try {
                    ossClient.putObject(bucketName, filePath, new ByteArrayInputStream(data.getFeedbackImgs().getBytes()));