阿里云对象存储——上传文件(超详细)

阿里云对象存储——上传文件

一、配置文件

#OSS连接路径
endpoint = http://oss-cn-beijing.aliyuncs.com
#已经在控制台创建的bucket
bucketName = 20201221
#相应的id和key值,请填写你具体的值,这里不方便展示我自己的。
accessKeyId = 
accessKeySecret = 

二、配置类

此配置类用户读取.properties系统文件

/**
 * 读取配置文件类
 *
 * @author ChanV
 * @create 2020-12-22-9:35
 */
public class SystemConfig {
    private static final String CONFIG_PROPERTIES = "oss.properties";

    public static String getConfigProperties(String key) throws IOException{
        ClassLoader loader = Thread.currentThread().getContextClassLoader();
        Properties properties = new Properties();
        InputStream in = loader.getResourceAsStream(CONFIG_PROPERTIES);
        properties.load(in);
        String value = properties.getProperty(key);
        value = new String(value.getBytes("ISO-8859-1"), "UTF-8");
        in.close();
        return value;
    }
}

此类用于配置OSS

/**
 * OSS配置类
 *
 * @author ChanV
 * @create 2020-12-22-9:33
 */
public class OSSConfig {
    private String endpoint;    //OSS连接路径
    private String bucketName;  //需要存储的bucketName
    private String accessKeyId; //连接KeyId
    private String accessKeySecret; //连接密钥

    public OSSConfig(){
        try {
            this.endpoint = SystemConfig.getConfigProperties("endpoint");
            this.bucketName = SystemConfig.getConfigProperties("bucketName");
            this.accessKeyId = SystemConfig.getConfigProperties("accessKeyId");
            this.accessKeySecret = SystemConfig.getConfigProperties("accessKeySecret");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public String getEndpoint() {
        return endpoint;
    }

    public void setEndpoint(String endpoint) {
        this.endpoint = endpoint;
    }

    public String getBucketName() {
        return bucketName;
    }

    public void setBucketName(String bucketName) {
        this.bucketName = bucketName;
    }

    public String getAccessKeyId() {
        return accessKeyId;
    }

    public void setAccessKeyId(String accessKeyId) {
        this.accessKeyId = accessKeyId;
    }

    public String getAccessKeySecret() {
        return accessKeySecret;
    }

    public void setAccessKeySecret(String accessKeySecret) {
        this.accessKeySecret = accessKeySecret;
    }
}

三、OSS工具类

@Repository
public class MyOSSUtil {

    private static OSSConfig config = null;

    //OSS上传文件
    public String uploadFile(MultipartFile file){
        config = config == null ? new OSSConfig():config;
        OSS ossClient = null;
        String fileName = file.getOriginalFilename();
        String folder = contentType(fileName.substring(fileName.lastIndexOf(".") + 1));
        String objectName = folder + UUID.randomUUID() + fileName;
        //如果没有下面这两行代码,访问url将不会预览而是直接下载下来
        ObjectMetadata metadata = new ObjectMetadata();
        metadata.setContentType("image/jpg");

        try {
            ossClient = new OSSClientBuilder().build(config.getEndpoint(), config.getAccessKeyId(), config.getAccessKeySecret());
            ossClient.putObject(config.getBucketName(), objectName, new ByteArrayInputStream(file.getBytes()), metadata);
            String[] url = getUrl(objectName).split("\\?");
            return url[0];
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "error";
    }

    //获得URL连接
    public String getUrl(String objectName){
        config = config == null ? new OSSConfig():config;
        Date expiration = new Date(new Date().getTime() + 3600l * 1000 * 24 * 365 * 10);
        //生成URL
        OSS ossClient = new OSSClientBuilder().build(config.getEndpoint(), config.getAccessKeyId(), config.getAccessKeySecret());
        URL url = ossClient.generatePresignedUrl(config.getBucketName(), objectName, expiration);
        if (url != null){
            return url.toString();
        }
        return null;
    }

    //根据文件类型分配文件夹
    private static String contentType(String fileType){
        fileType = fileType.toLowerCase();
        String folder = "";
        switch (fileType){
            case "bmp":
            case "gif":
            case "png":
            case "jpg":
            case "jpeg": folder = "images/";
                break;

            case "html":
            case "txt":
            case "xml": folder = "text/";
                break;

            case "map3": folder = "map3/";
                break;

            case "vsd":
            case "ppt":
            case "pptx":
            case "doc":
            case "docx": folder = "application/";
                break;
            case "mp4": folder = "video/";
                break;
        }
        return folder;
    }

}

四、用Swagger测试

在这里插入图片描述
成功上传图片并拿到图片的URL

在这里插入图片描述

访问成功

  • 9
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值