OSS文件上传--保姆级教程

1.注册阿里云账号(以有阿里云账号可忽略此步骤!)
打开阿里云官网:https://www.aliyun.com/

三、前期准备工作
1.阿里云实名验证
注意:完成阿里云实名验证(此步骤必做!不然无法开通OSS服务!)

1、登录阿里云账号后点击控制台:

2、点击头像--->点击实名验证---->选择个人验证------>支付宝登录授权即可完成实名验证!

开通OSS服务


点击立即开通即可!

3.创建Bucket存储空间
        开通服务后,在OSS产品详情页面单击管理控制台直接进入OSS管理控制台界面。您也 可以单击位于官网首页右上方菜单栏的控制台,进入阿里云管理控制台首页,然后单 击左侧的对象存储OSS菜单进入OSS管理控制台界面。OSS管理控制台 (aliyun.com)

注意:这里选择地域可以根据自己喜好选择,也可根据我的。如果选择其他地域的同学!记得在文件上传的Java类中修改地域名!(下面会进行讲解!)

4、获取AccessKey ID 和 AccessKey Secret 
控制台----->进入OSS对象存储服务---->点击头像---->点击AccessKey管理----->创建密钥

注意!!!:在验证身份后会自动跳出创建好的Access Key!一定记得保存好!!!后面会用!如果没复制保存!后期也无法查询到AccessKey Secret!!!  重要的事情说三遍!!!

第一遍!:一定记得保存好!!!后面会用!如果没复制保存!后期也无法查询到AccessKey Secret!!!

第二遍!!:一定记得保存好!!!后面会用!如果没复制保存!后期也无法查询到AccessKey Secret!!! 

第三遍!!!:一定记得保存好!!!后面会用!如果没复制保存!后期也无法查询到AccessKey Secret!!!    

创建application.properties文件

根据申请好的阿里云配置

  导入依赖
 <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.1.0</version>
        </dependency>

        <!--日期时间工具-->
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.10.1</version>
        </dependency>
        <!--hutool工具类-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.26</version>
        </dependency>
<!--        springboot-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
<!--        lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>com.plants.common</groupId>
            <artifactId>plant-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
            <version>2.7.5</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.33</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>
        <!--springboot集成mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
        <!--nacos服务发现依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
            <version>3.2.6</version>
            <scope>test</scope>
        </dependency>

Controller层

@RestController
@Slf4j
@RequestMapping("/oss")
public class OssController {

    @Autowired
    private OssService ossService;

    /**
     * 上传头像
     */
    @PostMapping("/fileoss")
    public Result uploadOSSFile(MultipartFile file) {
        //获取上传文件 MultipartFile
        //返回上传到oss的路径
        log.info("file==========================={}", file);
        String url = ossService.uploadFileAvatar(file);
        log.info("url==========================={}", url);
        if (url==null&&url.isEmpty()){
            return Result.build(url, ResultCodeEnum.FAIL);


        }
        return Result.build(url, ResultCodeEnum.SUCCESS);

    }
}

Service层

package com.plant.oss.service;

import org.springframework.web.multipart.MultipartFile;

public interface OssService {
    /**
     * 上传头像到oss
     * @param file 文件对象
     * @return
     */

    String uploadFileAvatar(MultipartFile file);
}

ServiceImpl层

@Service
public class OssServiceImpl implements OssService {
    /**
     * 上传头像到oss
     *
     * @param file 文件对象
     * @return
     */
    @Override
    public String uploadFileAvatar(MultipartFile file) {

        if (file == null || file.isEmpty()) {
            return "文件为空,请选择文件后再上传。";
        }

        // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
        String endpoint = ConstantPropertiesUtils.END_POINT;
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
        String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;
        //块名
        String bucketName=ConstantPropertiesUtils.BUCKET_NAME;
        try {
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            // 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
            InputStream inputStream = file.getInputStream();
            //获取文件真实名称
            String originalFilename = file.getOriginalFilename();
            //重命名,防止相同文件出现覆盖 生成的f4f2e1a3-391a-4d5a-9438-0c9f5d27708=》需要替换成f4f2e1a3391a4d5a94380c9f5d27708c
            String uuid = UUID.randomUUID().toString().replaceAll("-","");
            //新的文件名
            originalFilename=uuid+originalFilename;
            //2、把文件按照日期进行分类
            // 2021/6/30
            String datePath = new DateTime().toString("yyyy/MM/dd");
            //拼接 021/6/30/1.jpg
            originalFilename=datePath+"/"+originalFilename;
            // oss实现上传文件
            //第一个参数:Bucket名称
            //第二个参数:上传到oss文件路径和文件名称 /zhz/avatar.txt
            ossClient.putObject(bucketName, originalFilename, inputStream);
            // 关闭OSSClient。
            ossClient.shutdown();

            //把上传之后文件路径返回
            //需要把上传到阿里云oss路径手动拼接出来->https://zhz-mail.oss-cn-beijing.aliyuncs.com/WechatIMG19.jpeg


            return  "https://"+bucketName+"."+endpoint+"/"+originalFilename;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

还有最重要的一个工具类  来初始化我们的一个配置

@Component
@ConfigurationProperties(prefix = "aliyun.oss.file")
public class ConstantPropertiesUtils implements InitializingBean {

    /**
     * 对应公网endpoint地址
     */
    @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;

    public static String END_POINT;
    public static String ACCESS_KEY_ID;
    public static String ACCESS_KEY_SECRET;
    public static String BUCKET_NAME;


    @Override
    public void afterPropertiesSet(){
        END_POINT=endpoint;
        ACCESS_KEY_ID=keyId;
        ACCESS_KEY_SECRET=keySecret;
        BUCKET_NAME=bucketName;
    }
}
  • 15
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值