阿里云OSS对象存储Demo

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.CannedAccessControlList;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;

import java.io.InputStream;
import java.util.UUID;

/**
 * <h1>文件上传业务实现Demo</h1>
 * <hr/>
 * <p> 详细参考阿里云OSS文档 </p>
 *
 * @author mulun
 * @version 1.0
 */
@Service
public class FileServiceImpl implements FileService {
    /**
     * <h2>文件上传至阿里云</h2>
     * <hr/>
     *
     * @param inputStream 填写本地文件的完整路径。
     * @param module      存放的模块
     * @param fileName    文件名
     * @return 阿里云文件绝对路径
     */
    @Override
    public String upload(InputStream inputStream, String module, String fileName) {

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(
                OssProperties.ENDPOINT,
                OssProperties.KEY_ID,
                OssProperties.KEY_SECRET);

        // 如果BUCKET_NAME不存在,就创建.
        if (!ossClient.doesBucketExist(OssProperties.BUCKET_NAME)) {
            // 创建一个存储空间
            ossClient.createBucket(OssProperties.BUCKET_NAME);
            // 设置该存储空间的访问权限
            ossClient.setBucketAcl(OssProperties.BUCKET_NAME,
                    CannedAccessControlList.PublicRead);
        }

        // 构建日期路径,基于时间日期的文件夹路径
        String timeFolder = new DateTime().toString("/yyyy/MM/dd/");

        // 文件名生成:uuid.扩展名
        fileName = UUID.randomUUID().toString() + fileName.substring(fileName.lastIndexOf("."));

        // 文件目录结构 "avatar/2021/01/01/uuid.jpg"
        String key = module + timeFolder + fileName;

        // 文件上传至阿里云
        ossClient.putObject(OssProperties.BUCKET_NAME, key, inputStream);

        // 关闭OSSClient。
        ossClient.shutdown();

        // 返回阿里云文件绝对路径
        return "https://" + OssProperties.BUCKET_NAME + "." + OssProperties.ENDPOINT + "/" + key;
    }

    /**
     * 根据路径删除文件
     *
     * @param url
     */
    @Override
    public void removeFile(String url) {
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(
                OssProperties.ENDPOINT,
                OssProperties.KEY_ID,
                OssProperties.KEY_SECRET);
        //文件名(服务器上的文件路径)
        String host = "https://" + OssProperties.BUCKET_NAME + "." + OssProperties.ENDPOINT + "/";
        String objectName = url.substring(host.length());
        // 删除文件。
        ossClient.deleteObject(OssProperties.BUCKET_NAME, objectName);
        // 关闭OSSClient。
        ossClient.shutdown();
    }
}

application.yaml:

aliyun:
  oss:
    endpoint: endpoint
    keyId: keyId
    keySecret: keySecret
    bucketName: bucketName
上一篇:tp5上传阿里云oss并对接阿里云检测人脸(DetectFace)


下一篇:leetcode 516. Longest Palindromic Subsequence | 516. 最长回文子序列(递归 -> 傻缓存 ->DP)