使用爱组搭实现阿里云OSS上传文件服务

编程的过程中,如果有好的轮子,我会优先考虑使用,其次是自己从0-1去实现。这次项目中有个需求是通过前端上传文件到阿里云对象存储中供后续逻辑使用。

系统的后端框架用的微服务,文件服务中已经有一部分上传功能了,实现了文件上传到服务所在的机器磁盘,不支持上传对象存储。看到这个需求时我想到了爱组搭。爱组搭是提供SpringBoot第三方组件地代码平台,它的初衷是开发者可以使用它进行低代码甚至无代码构建自己的应用。目前来看的话,只能做到低代码。

这是爱组搭官网:http://doc.aizuda.com/

言归正传,本次解决对象存储的需求我用的是爱组搭的OSS文件存储组件。主要步骤就是引入依赖和实现接口逻辑。

引入依赖

  <!--爱组搭对象存储组件-->

  <dependency>
        <groupId>com.aizuda</groupId>
        <artifactId>aizuda-oss</artifactId>
        <version>1.0.4</version>
  </dependency>


  <!--阿里云对象存SDK-->
  <dependency>
        <groupId>com.aliyun.oss</groupId>
        <artifactId>aliyun-sdk-oss</artifactId>
        <version>3.15.0</version>
  </dependency>

爱组搭起到的作用是对阿里云的SDK进行了再封装,简化开发。如果只引入爱组搭对象存储组件服务无法启动。

基础配置

配置信息直接写到注册中心nacos配置文件中即可

# 配置存储平台 ,为默认存储平台
aizuda:
  oss:
    aliyun-oss:
      platform: aliyun
      endpoint: xxx
      accessKey: xxx
      secretKey: xxx
      bucketName: xxx
      fileName: xxx/

 Bean方式注入

@Configuration
public class OssConfig {

    @Value("${aizuda.oss.aliyun-oss.end-point}")
    private String endpoint;


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


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


    @Value("${aizuda.oss.aliyun-oss.bucketName}")
    private String bucketName;


    @Bean
    public IFileStorage aliyun() {
        // 注入一个自定义存储平台
        OssProperty ossProperty = new OssProperty();
        ossProperty.setPlatform(StoragePlatform.aliyun);
        ossProperty.setBucketName(bucketName);
        ossProperty.setEndpoint(endpoint);
        ossProperty.setAccessKey(accessKey);
        ossProperty.setSecretKey(secretKey);
        return new AliyunOss(ossProperty);
    }

}

接口实现

@Slf4j
@Service(value = "aliyunOssService")
public class AliyunOssFileInfoServiceImpl implements ISysFileInfoService {

    @Reference
    private IFileStorage fileStorage;

    @Value("${aizuda.oss.aliyun-oss.fileName}")
    private String fileName;

    @Value("${aizuda.oss.aliyun-oss.end-point}")
    private String endpoint;

    @Value("${aizuda.oss.aliyun-oss.bucketName}")
    private String bucketName;



    @Override
    public void upload(MultipartFile[] files, String businessType) {
        if (files == null) {
            return new ArrayList<>();
        }

        Arrays.asList(files).stream().map(file -> aliyunUpload(file))).collect(Collectors.toList());
     
    }

    private String aliyunUpload(MultipartFile f){
        ByteArrayInputStream os = null;
        OssResult ossResult = null;
        AtomicReference<String> finalURL = new AtomicReference<>();
        try{
            String objectName = fileName+"module/Custom/"+f.getOriginalFilename();
            byte [] fileBytes = f.getBytes();
            os = new ByteArrayInputStream(fileBytes);
            //上传
            OSS.fileStorage("aliyun").upload(os, f.getOriginalFilename(),objectName);
            finalURL.set(String.format("https://%s.%s/%s", bucketName,endpoint, objectName));
            return finalURL.get();
        }catch (Exception e){
           
        }
    }


}

最后说明:接口实现是主要逻辑,其他无关代码都已经做了删除。 finalURL.set(String.format("https://%s.%s/%s", bucketName,endpoint, objectName)); 这行代码是为了解决组件提供的预览连接失效问题,此处需要手动拼接,供后续逻辑使用。使用这个连接的前提是阿里云OSS中药对bucket权限设置为公开读。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值