Skip to content

阿里云OSS


⭐ X-File-Storage

文件上传万能工具,一行代码将文件存储到本地、FTP、SFTP、WebDAV、阿里云 OSS、华为云 OBS、七牛云 Kodo、腾讯云 COS、百度云 BOS、又拍云 USS、MinIO、 Amazon S3、GoogleCloud Storage、FastDFS、 Azure Blob Storage、Cloudflare R2、金山云 KS3、美团云 MSS、京东云 OSS、天翼云 OOS、移动 云 EOS、沃云 OSS、 网易数帆 NOS、Ucloud US3、青云 QingStor、平安云 OBS、首云 OSS、IBM COS、其它兼容 S3 协议的存储平台

官网:https://x-file-storage.xuyanwu.cn/#/

基于若依框架得操作示例文档:https://ai.feishu.cn/docx/LPsjdeyMxoad2FxHFcOcSkLHn1e

阿里云 OSS

配置类

java
@Setter
@Getter
@NoArgsConstructor
@ToString
@Configuration
@ConfigurationProperties(prefix = "zzyl.framework.oss")
public class AliOssConfigProperties {

    /**
     * 域名站点
     */
    private String endpoint ;

    /**
     * 秘钥Id
     */
    private String accessKeyId ;

    /**
     * 秘钥
     */
    private String accessKeySecret ;

    /**
     * 桶名称
     */
    private String bucketName ;

}

创建链接

java
@Slf4j
@Configuration
public class OssAliyunAutoConfig {

    @Autowired
    AliOssConfigProperties aliOssConfigProperties;

    @Bean
    public OSS ossClient(){
        log.info("-----------------开始创建OSSClient--------------------");
        OSS ossClient = new OSSClientBuilder().build(aliOssConfigProperties.getEndpoint(),
                aliOssConfigProperties.getAccessKeyId(), aliOssConfigProperties.getAccessKeySecret());
        //判断容器是否存在,不存在就创建
        if (!ossClient.doesBucketExist(aliOssConfigProperties.getBucketName())) {
            ossClient.createBucket(aliOssConfigProperties.getBucketName());
            CreateBucketRequest createBucketRequest = new CreateBucketRequest(aliOssConfigProperties.getBucketName());
            //设置问公共可读
            createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
            ossClient.createBucket(createBucketRequest);
        }

        //添加客户端访问日志
        SetBucketLoggingRequest request = new SetBucketLoggingRequest(aliOssConfigProperties.getBucketName());
        // 设置存放日志文件的存储空间。
        request.setTargetBucket(aliOssConfigProperties.getBucketName());
        // 设置日志文件存放的目录。
        request.setTargetPrefix(aliOssConfigProperties.getBucketName());
        ossClient.setBucketLogging(request);

        log.info("-----------------结束创建OSSClient--------------------");
        return ossClient;
    }
}

文件上传

java
@Slf4j
@Component
public class OSSAliyunFileStorageService {

    @Autowired
    OSS ossClient;

    @Autowired
    AliOssConfigProperties aliOssConfigProperties;

    /**
     * 上传文件
     *
     * @param objectName  文件名
     * @param inputStream 文件流对象
     * @return
     */
    public String store(String objectName, InputStream inputStream) {
        //文件读取路径
        String url = null;
        // 判断文件
        if (inputStream == null) {
            log.error("上传文件:objectName{}文件流为空", objectName);
            return url;
        }
        log.info("OSS文件上传开始:{}", objectName);
        try {
            String bucketName = aliOssConfigProperties.getBucketName();
            // 上传文件
            PutObjectRequest request = new PutObjectRequest(bucketName, objectName, inputStream);

            PutObjectResult result = ossClient.putObject(request);
            // 设置权限(公开读)
            ossClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);
            if (result != null) {
                log.info("OSS文件上传成功:{}", objectName);

            }
        } catch (OSSException oe) {
            log.error("OSS文件上传错误:{}", oe);
        } catch (ClientException ce) {
            log.error("OSS文件上传客户端错误:{}", ce);
        }
        //文件访问路径规则 https://BucketName.Endpoint/ObjectName
        StringBuilder stringBuilder = new StringBuilder("https://");
        stringBuilder
                .append(aliOssConfigProperties.getBucketName())
                .append(".")
                .append(aliOssConfigProperties.getEndpoint())
                .append("/")
                .append(objectName);

        log.info("文件上传到:{}", stringBuilder.toString());
        return stringBuilder.toString();
    }

    /**
     * 根据url删除文件
     *
     * @param pathUrl url地址(全路径)
     */
    public void delete(String pathUrl) {
        String prefix = "https://" + aliOssConfigProperties.getBucketName() + "." + aliOssConfigProperties.getEndpoint() + "/";
        String key = pathUrl.replace(prefix, "");
        List<String> keys = Lists.newArrayList();
        keys.add(key);
        // 删除Objects
        ossClient.deleteObjects(new DeleteObjectsRequest(aliOssConfigProperties.getBucketName()).withKeys(keys));
    }
}