阿里云oss图片上传

Posted god-jiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阿里云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()));
                } catch (Exception ex) {
                    log.error("阿里云oss出错", ex);
                }
            }
        }
    }

4、上传完到服务器查看图片

用阿里云oss提供的OSS浏览器,然后根据AccessKey和SecretKey就可以登陆上去查看图片信息
在这里插入图片描述

踩坑提示

上传完图片会生成一个url链接,直接浏览器访问会报“You have no right to access this object because of bucket acl.”,这个是因为创建bucketName的时候RAM访问控制选择为公共读即可解决。

总结

以上就是上周经历的一次阿里云oss图片上传的经历,我已经把业务逻辑全部过滤掉,只剩下阿里云oss的主要代码和流程。在这里主要就是记录我工作上遇到的一些问题的一些记录,希望对你们有所帮助。

PS:对基金感兴趣的可以关注【公众号:牛熊无悔】,每日3点前更新操作,一起吃肉

以上是关于阿里云oss图片上传的主要内容,如果未能解决你的问题,请参考以下文章

TP5+阿里云OSS上传文件第三节,实现淘宝上传商品图片

上传图片到阿里云oss

项目总结56:阿里云OSS上传的图片被自动旋转问题解决

laravel下使用阿里云oss上传图片

阿里云oss上传图片

阿里云oss图片上传