阿里云图片文件上传

一,官网地址

复制代码
https://help.aliyun.com/document_detail/84781.html

一切依据于官网

二,导入依赖

复制代码
<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>

三,创建配置文件

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

#环境设置:dev、test、prod
spring.profiles.active=dev
        
#阿里云 OSS
#不同的服务器,地址不同
aliyun.oss.file.endpoint=oss-cn-beijing.aliyuncs.com
aliyun.oss.file.keyid=your accessKeyId
aliyun.oss.file.keysecret=your accessKeySecret
#bucket可以在控制台创建,也可以使用java代码创建
aliyun.oss.file.bucketname=guli-file

四创建启动类

java 复制代码
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;


@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@ComponentScan("com.atguigu")
public class OssApplication {
    public static void main(String[] args) {
        SpringApplication.run(OssApplication.class,args);
    }
}

五,创建常量类

由于环境的不同,配置需要变化,因此需要将配置文件变为软编码而不是写在硬编码里面,耦合性较高

java 复制代码
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;


@Component
public class ConstantPropertiesUtil implements InitializingBean {
    @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() throws Exception {
        END_POINT = endpoint;
        ACCESS_KEY_ID = keyId;
        ACCESS_KEY_SECRET = keySecret;
        BUCKET_NAME = bucketName;
    }
}

六,创建controller→service

java 复制代码
import com.atguigu.yygh.common.R;
import com.atguigu.yygh.oss.service.OssService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

@Api(tags = "文件上传接口")
@RestController
@RequestMapping("/admin/oss/file")
public class OssController {
    @Autowired
    private OssService ossService;
    /**
     * @Description: 上传文件
     * @return:  文件的url
     * @param:文件流
     * @author: Mr zhan
     */
    @ApiOperation("上传图片到阿里云")
    @PostMapping("upload")
    public R upload(MultipartFile file) {
        //传递到service

      String fileUrl=ossService.upload(file);
      return R.ok().data("file",fileUrl);
    }
}
java 复制代码
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.atguigu.yygh.oss.service.OssService;
import com.atguigu.yygh.oss.util.ConstantPropertiesUtil;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;


@Service
public class OssServiceImpl implements OssService {

    /**
     * @Description: 上传文件
     * @return:  文件的url
     * @param:文件流
     * @author: Mr zhan
     */
    @Override
    public String upload(MultipartFile file) {
        //1.获取文件的名称
        String filename = file.getOriginalFilename();
        //2.准备参数
                            //地域结点
        String endpoint=ConstantPropertiesUtil.END_POINT;
                            //唯一id
        String accessKeyId=ConstantPropertiesUtil.ACCESS_KEY_ID;
                            //id的对应的唯一secret
        String accessKeySecret=ConstantPropertiesUtil.ACCESS_KEY_SECRET;
                            //存储桶
        String bucketName=ConstantPropertiesUtil.BUCKET_NAME;
                            //文件存储的路径
        //   String objectName="用下面的filename代替";
        //3.创建客户端
        OSS ossClient= new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        String uuid = UUID.randomUUID().toString().replaceAll("-","");
        filename=uuid+filename;
        //4.由于真实的开发需要,方便运营,因此需要分类格式如下:  2022/03/05/图片名称
        SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
        String month = format.format(new Date());
        filename=month+"/"+filename;
        //上传
        try {
            ossClient.putObject(bucketName,filename,file.getInputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //关闭资源
            ossClient.shutdown();
        }


        return "https://"+bucketName+"."+endpoint+"/"+filename;
    }
}
相关推荐
梦幻通灵10 分钟前
Mysql处理锁冲突Lock conflict可用方案
数据库·mysql
小碗羊肉11 分钟前
【Redis | 第五篇】分布式锁
数据库·redis·分布式
Java爱好狂.12 分钟前
Redis高级笔记:深入浅出Java面试高频考点!
java·数据库·redis·后端·java面试·java程序员·java八股文
念恒1230613 分钟前
MySQL事务(2)---事务隔离级别
数据库·mysql
rising start16 分钟前
深度解析 Redis 主从复制
数据库·redis·主从复制
网管NO.122 分钟前
SQL 企业实战全流程|全覆盖前置基础 + 核心语法(MySQL8.0 可直接运行)
数据库·oracle
头歌实践平台24 分钟前
HBase 完全分布式安装(新)
数据库·分布式·hbase
大尚来也24 分钟前
主键、外键、索引,一篇讲透
java·数据库·oracle
j7~28 分钟前
【MYSQL】表的内外连接--详解(重点)
数据库·mysql·内连接·左外连接·右外连接
147API39 分钟前
Claude Opus 4.8 接口与工程落地分析:长任务调用链应该怎么设计
java·前端·数据库