springboot将图片上传至阿里云OSS

配置文件

首先是配置文件application.yml
addressbucket的地址,用来获取图片上传后的图片地址,以便之后访问
end-point是阿里云提供的oss的地址,在oss文档中有介绍
access-keysercret-key是密钥
bucket是oss储存的名称

# 阿里云 oss储存服务
aliyun:
  oss:
    address: your oss address
    end-point: oss-cn-shenzhen.aliyuncs.com
    access-key: your access key
    secret-key: you secret key
    bucket: your bucket name

代码

然后直接上代码
先是把属性值注入

    /** oss处访问图片的 url */
    @Value("${aliyun.oss.address}")
    private String address;

    /** oss的 endpoint */
    @Value("${aliyun.oss.end-point}")
    private String endPoint;

    @Value("${aliyun.oss.access-key}")
    private String accessKey;

    @Value("${aliyun.oss.secret-key}")
    private String secretKey;

    /** oss的储存名称 */
    @Value("${aliyun.oss.bucket}")
    private String bucket;

接下来是实际上传的代码

 public Map uploadFile(InputStream inputStream, String suffix) {
        // 生成随机的文件名
        String fileName = UUID.randomUUID().toString().replaceAll("-", "") + suffix;

        // 调用阿里云 oss把图片上传到 oss
        OSS ossClient = new OSSClientBuilder().build(endPoint, accessKey, secretKey);
        ossClient.putObject(bucket, fileName, inputStream);
        ossClient.shutdown();

        // 获取上传后的图片链接
        // 后端将地址拼接一下,oss那里设为了公共读,阿里云屁事太多了
        String picAddr = address + "/" + fileName;

        // 前端所必须的返回格式
        Map map = new HashMap() {{
            put("url", picAddr);
            put("success", 1);
            put("message", "upload success!");
        }};
        return map;
    }

先设置一个文件名,用uuid获取随机名称,防止重名。
利用阿里云oss提供的OSSClientBuilder构建一个OSS类,然后利用oss上传图片,最后关闭。
获取上传图片链接那里,阿里云sdk提供了一个CallBack回调接口,用于上传完后调用该接口。
该接口是使用POST请求来请求你的服务器,然后把回调信息放入请求中返回。
由于使用本地调试,就没深入使用CallbBack来回调,而是直接把阿里云OSS中的bucket设为公共读,然后直接访问里面给出的文件地址,因为文件名称也都是UUID随机生成,所以也不用担心别人会读到其他文件

你可能感兴趣的:(springboot将图片上传至阿里云OSS)