阿里云 云存储

首先pom文件引入


        
            joda-time
            joda-time
        

        
        
            com.aliyun.oss
            aliyun-sdk-oss
            2.8.3
        

        
        **JAXB api被认为是Java EE api,因此不再包含在Java SE 9默认的类路径。在Java中11他们完全从JDK中删除**
        
            javax.xml.bind
            jaxb-api
            2.3.0
        

yml中配置

ali-oss://名字随便起
  file:
    endpoint: oss-cn-beijing.aliyuncs.com
    keyid: 
    keysecret: 
    bucketname: 

bucketname:阿里云 云存储_第1张图片
endpoint:阿里云 云存储_第2张图片
阿里云 云存储_第3张图片
阿里云 云存储_第4张图片
这里可以拿到 keyid: keysecret:

新建工具类

package Ceshi.utils.alioss;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

/**
 * @author 翎墨袅
 * @version V1.0
 * @Package Ceshi.utils.alioss
 * @ClassName ConstantPropertiesUtil
 * @Description TODO
 * @date 2020/7/28 10:11
 **/
@Component
public class ConstantPropertiesUtil implements InitializingBean{
    @Value("${ali-oss.file.endpoint}")
    private String endPoint;

    @Value("${ali-oss.file.keyid}")
    private String keyId;

    @Value("${ali-oss.file.keysecret}")
    private String keySecret;

    @Value("${ali-oss.file.bucketname}")
    private String bucketName;

    // 定义常量,为了能够使用
    public static String ENDPOINT;
    public static String KEYID;
    public static String KEYSECRET;
    public static String BUCKETNAME;
    /**
     * 服务器启动的时候,ConstantPropertiesUtil初始化,调用里面的afterPropertiesSet方法,读取配置文件的内容
     * @throws Exception
     */
    @Override
    public void afterPropertiesSet() throws Exception {
        ENDPOINT = endPoint;
        KEYID = keyId;
        KEYSECRET = keySecret;
        BUCKETNAME = bucketName;
    }
}

调用上传方法

public Result ceshishenagchuan(@RequestParam("file") MultipartFile file){
        // 地域节点
        String endpoint = ConstantPropertiesUtil.ENDPOINT;
        // 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建。
        String accessKeyId = ConstantPropertiesUtil.KEYID;
        String accessKeySecret = ConstantPropertiesUtil.KEYSECRET;
        // BucketName
        String yourBucketName = ConstantPropertiesUtil.BUCKETNAME;

        try {
            // 1.获取上传文件 MultipartFile file
            // @RequestParam("file") file 与表单输入项的name值保持一致
//
            // 2.获取上传文件名称,获取上传文件输入流
            String fileName = file.getOriginalFilename();
            // 在文件名称之前添加uuid值,保证文件名称不重复
            String uuid = UUID.randomUUID().toString();
            fileName = uuid + fileName;

            // 获取当前日期 2020/01/03
            String filePath = new DateTime().toString("yyyy/MM/dd");
//
            // 拼接文件完整路径 2020/01/03/parker.jpg
            fileName = filePath + "/" + fileName;

            // 获取上传文件输入流
            InputStream in = file.getInputStream();

            // 3.把上传文件存储到阿里云oss里面
            // 创建OSSClient实例。
            OSS ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
            // 上传文件流
            // 第一个参数时BucketName,第二个参数是文件名称,第三个参数是输入流
            ossClient.putObject(yourBucketName, fileName, in);
            // 关闭OSSClient。
            ossClient.shutdown();

            Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 10);//失效时间
            //上传之后的oss存储路径
            String url = ossClient.generatePresignedUrl(yourBucketName, fileName, expiration).toString();

            return Result.ok("data", url);
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("操作失败");
        }

其中Result是封装的返回类 自己看着改改就行

阿里云 云存储_第5张图片

你可能感兴趣的:(阿里云 云存储)