上传文件到阿里云对象存储OSS

准备工作:开通对象存储OSS功能,新建一个Bucket工程。
第一步:在idea工具里面的pom.xml引入依赖包

<dependencies>
    <!-- 阿里云oss依赖 -->
    <dependency>
        <groupId>com.aliyun.oss</groupId>
        <artifactId>aliyun-sdk-oss</artifactId>
    </dependency>

    <!-- 日期工具栏依赖 -->
    <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
    </dependency>
</dependencies>

第二步:在application.properties文件

#阿里云 OSS
#不同的服务器,地址不同
#地域
aliyun.oss.file.endpoint=your endpoint
#id
aliyun.oss.file.keyid=your accessKeyId
#密钥
aliyun.oss.file.keysecret=your accessKeySecret
#bucket可以在控制台创建,也可以使用java代码创建
aliyun.oss.file.bucketname= your bucketname

地域,是你创建Bucket工程选择的区域;在accesskeys里面创建一个accesskeys工程,获取里面的id和密钥;bucketname是你创建Bucket的名称。
第三步:创建常量读取工具类ConstantPropertiesUtils,读取application.properties文件里的配置内容。

//读取配置文件的内容,使用@Value注解来获取配置文件的内容
@Value("${aliyun.oss.file.endpoint}")
private String endpoint;
@Value("${aliyun.oss.file.keyid}")
private String keyId;
@Value("${aliyun.oss.file.keysecret}")
private String keySecret;
@Value("${aliyun.oss.file.bucketname}")
private String bucketName;

当项目已启动,实现spring接口,spring加载之后,执行接口一个方法。
让ConstantPropertiesUtils实现InitializingBean里面的方法

//这个方法是在ConstantPropertiesUtils初始化之后执行
//定义公开静态常量
public static String END_POIND;
public static String ACCESS_KEY_ID;
public static String ACCESS_KEY_SECRET;
public static String BUCKET_NAME;
@Override
public void afterPropertiesSet() throws Exception {
      END_POIND=endpoint;
      ACCESS_KEY_ID=keyId;
      ACCESS_KEY_SECRET=keySecret;
      BUCKET_NAME=bucketName;

}

第四步:在service的步骤
创建一个类,在类里面创建一个方法
String uploaFileAvatar(MultipartFile file);
在impl实现这个方法:

// 工具类获取值
String endpoint = ConstantPropertiesUtils.END_POIND;
String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;
String bucketName = ConstantPropertiesUtils.BUCKET_NAME;

try {
    // 创建OSS实例。
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    //获取上传文件输入流
    InputStream inputStream = file.getInputStream();
    //获取文件名称
    String fileName = file.getOriginalFilename();

    //1.在文件名称里面添加随机唯一的值,主要是为了防止文件上传时文件名称相同,最后一次上传的会把前面的覆盖
    //把文件名称有-给去掉
    String uuid = UUID.randomUUID().toString().replaceAll("-","");
    //结构 yuy76t5rew01.jpg
    fileName=uuid+fileName;

    //2.把文件按照日期进行分类
    //形式:2021/5/25/01.jpg
    //获取当前日期
    String datePath = new DateTime().toString("yyyy/MM/dd");
    //拼接
    fileName=datePath+"/"+fileName;

    //调用oss方法实现上传
    //第一个参数  Bucket名称
    //第二个参数  上传到oss文件路径和文件名称   aa/bb/1.jpg
    //第三个参数  上传文件输入流
    ossClient.putObject(bucketName,fileName , inputStream);
    // 关闭OSSClient。
    ossClient.shutdown();

    //把上传之后文件路径返回
    //需要把上传到阿里云oss路径手动拼接出来
    //https+bucketName+endpoion+文件名称
    String url="";
    url="https://"+bucketName+"."+endpoint+"/"+fileName;
    return url;

}catch (Exception e){
   e.printStackTrace();
   return null;
}

第五步,在controller控制层步骤

@RestController
@RequestMapping("/eduoss/fileoss")
@CrossOrigin  //解决跨域
public class OssController {
    @Autowired
    private OssService ossService;
    //上传头像的方法
    @PostMapping
    public R uploadOssFile(MultipartFile file){
        //获取上传的文件  MultipartFile
        //返回上传到oss的路径
        String url=ossService.uploaFileAvatar(file);

       return R.ok().data("url",url);
    }

里面的R是自己封装的统一返回结果对象。具体请看:
https://blog.csdn.net/weixin_44567381/article/details/117378920

后端操作完成,我们可以使用swagger测试一下。

这样上传头像到阿里云对象存储OSS就完成了。
学习总结:通过这次学习我明白了如何通过代码实现上传文件到阿里云的操作。大家可以自己动手实际操作,体会一下用代码上传文件。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值