1. 开通“对象存储OSS”服务

  (1)申请阿里云账号

  (2)实名认证

  (3)开通“对象存储OSS”服务

  (4)进入管理控制台

2. 创建Bucket

  在管理控制台中,新建Bucket,选择标准存储、公共读、不开通

3. 搭建service-oss模块

  (1)修改pom.xml,引入阿里云oss依赖

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

  (2)添加配置文件application.properties

# 服务端口
server.port=8205
# 服务名
spring.application.name=service-oss

#返回json的全局时间格式
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8

# nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

aliyun.oss.endpoint=oss-cn-hangzhou.aliyuncs.com
aliyun.oss.accessKeyId=xx
aliyun.oss.secret=xx
aliyun.oss.bucket=lewang-yygh

  (3)配置网关

#设置路由id
spring.cloud.gateway.routes[5].id=service-oss
#设置路由的uri
spring.cloud.gateway.routes[5].uri=lb://service-oss
#设置路由断言,代理servicerId为auth-service的/auth/路径
spring.cloud.gateway.routes[5].predicates= Path=/*/oss/**

  (4)创建controller和实现类

@RestController
@RequestMapping("/api/oss/file")
public class FileApiController {

    @Autowired
    private FileService fileService;

    //上传文件到阿里云oss
    @PostMapping("fileUpload")
    public Result fileUpload(MultipartFile file) {
        String url = fileService.upload(file);
        return Result.ok(url);
    }
}
@Service
public class FileServiceImpl implements FileService {

    @Override
    public String upload(MultipartFile file) {

        // Endpoint以杭州为例,其它Region请按实际情况填写。
        String endpoint = ConstantOssPropertiesUtils.EDNPOINT;
        String accessKeyId = ConstantOssPropertiesUtils.ACCESS_KEY_ID;
        String accessKeySecret = ConstantOssPropertiesUtils.SECRECT;
        String bucketName = ConstantOssPropertiesUtils.BUCKET;

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

            //生成随机唯一值,使用uuid,添加到文件名称里面
            String uuid = UUID.randomUUID().toString().replaceAll("-","");
            fileName = uuid+fileName;

            //按照当前日期,创建文件夹,上传到创建文件夹里面
            //  2021/02/02/01.jpg
            String timeUrl = new DateTime().toString("yyyy/MM/dd");
            fileName = timeUrl+"/"+fileName;

            ossClient.putObject(bucketName,fileName,inputStream);
            // 关闭OSSClient。
            ossClient.shutdown();
            //上传之后文件路径
            // https://lewang-yygh.oss-cn-hangzhou.aliyuncs.com/01.jpg
            String url = "https://"+bucketName+"."+endpoint+"/"+fileName;//返回
            return url;

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

 

posted on 2023-01-03 21:25  homle  阅读(147)  评论(1编辑  收藏  举报