阿里云图片文件上传

一,官网地址

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;
    }
}
相关推荐
dazhong20121 小时前
PLSQL 客户端连接 Oracle 数据库配置
数据库·oracle
正在走向自律1 小时前
阿里云ESC服务器一次性全部迁移到另一个ESC
服务器·阿里云·云计算
了一li3 小时前
Qt中的QProcess与Boost.Interprocess:实现多进程编程
服务器·数据库·qt
码农君莫笑3 小时前
信管通低代码信息管理系统应用平台
linux·数据库·windows·低代码·c#·.net·visual studio
别致的影分身4 小时前
使用C语言连接MySQL
数据库·mysql
OkeyProxy4 小时前
HTTP、HTTPS和SOCKS5代理協議
网络协议·https·云计算·代理服务器·海外ip代理
京东零售技术5 小时前
“慢”增长时代的企业数据体系建设:超越数据中台
数据库
sdaxue.com6 小时前
帝国CMS:如何去掉帝国CMS登录界面的认证码登录
数据库·github·网站·帝国cms·认证码
o(╥﹏╥)6 小时前
linux(ubuntu )卡死怎么强制重启
linux·数据库·ubuntu·系统安全
阿里嘎多学长7 小时前
docker怎么部署高斯数据库
运维·数据库·docker·容器