springboot 集成oss
集成aliyun oss
结构如下:

pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- aliyun bigen -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>${aliyun.oss.version}</version>
</dependency> <dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<!-- aliyun end -->
<!-- lombok bigen -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<!-- lombok end -->
application.yml
aliyun:
file:
endpoint: http://oss-cn-hangzhou.aliyuncs.com
accessKeyId: *******************
accessKeySecret: *******************
bucketName: tzqimg
folder : test
webUrl: https://tzqimg.oss-cn-hangzhou.aliyuncs.com spring:
servlet:
multipart:
max-file-size: 1MB
max-request-size: 1MB
package com.aliyun.we; import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component; @Data
@Component
@Configuration
public class ConstantConfig {
@Value("${aliyun.file.endpoint}")
private String endpoint;
@Value("${aliyun.file.accessKeyId}")
private String accessKeyId;
@Value("${aliyun.file.accessKeySecret}")
private String accessKeySecret;
@Value("${aliyun.file.folder}")
private String folder;
@Value("${aliyun.file.bucketName}")
private String bucketName;
@Value("${aliyun.file.webUrl}")
private String webUrl; }
package com.aliyun.we; import lombok.Data; import java.io.Serializable; /**
* @description: 文件上传信息存储类
* @author: tzq
* @create 2019-08-06
*/
@Data
public class FileDTO implements Serializable { /**
* 文件大小
*/
private Long fileSize;
/**
* 文件的绝对路径
*/
private String fileAPUrl; /**
* 文件的web访问地址
*/
private String webUrl; /**
* 文件后缀
*/
private String fileSuffix;
/**
* 存储的bucket
*/
private String fileBucket; /**
* 原文件名
*/
private String oldFileName;
/**
* 存储的文件夹
*/
private String folder; public FileDTO() {
} public FileDTO(Long fileSize, String fileAPUrl, String webUrl, String fileSuffix, String fileBucket, String oldFileName, String folder) {
this.fileSize = fileSize;
this.fileAPUrl = fileAPUrl;
this.webUrl = webUrl;
this.fileSuffix = fileSuffix;
this.fileBucket = fileBucket;
this.oldFileName = oldFileName;
this.folder = folder;
}
}
package com.aliyun.we; import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.CannedAccessControlList;
import com.aliyun.oss.model.CreateBucketRequest;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID; @Component
public class AliyunOSSUtil {
@Autowired
private ConstantConfig constantConfig;
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(AliyunOSSUtil.class); /** 上传文件*/
public FileDTO upLoad(File file){
logger.info("------OSS文件上传开始--------"+file.getName());
String endpoint=constantConfig.getEndpoint();
System.out.println("获取到的Point为:"+endpoint);
String accessKeyId=constantConfig.getAccessKeyId();
String accessKeySecret=constantConfig.getAccessKeySecret();
String bucketName=constantConfig.getBucketName();
String fileHost=constantConfig.getFolder();
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
String dateStr=format.format(new Date());
String uuid = UUID.randomUUID().toString().replace("-", "");
String suffix = file.getName().substring(file.getName().lastIndexOf(".") + 1);
// 判断文件
if(file==null){
return null;
}
OSSClient client=new OSSClient(endpoint, accessKeyId, accessKeySecret);
try {
// 判断容器是否存在,不存在就创建
if (!client.doesBucketExist(bucketName)) {
client.createBucket(bucketName);
CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
client.createBucket(createBucketRequest);
}
// 设置文件路径和名称
String fileUrl = fileHost + "/" + (dateStr + "/" + uuid ) + "-" + file.getName();
// 设置权限(公开读)
client.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);
// 上传文件
PutObjectResult result = client.putObject(new PutObjectRequest(bucketName, fileUrl, file)); if (result != null) {
System.out.println(result);
logger.info("------OSS文件上传成功------" + fileUrl);
return new FileDTO(
file.length(),//文件大小
fileUrl,//文件的绝对路径
constantConfig.getWebUrl() +"/"+ fileUrl,//文件的web访问地址
suffix,//文件后缀
"",//存储的bucket
bucketName,//原文件名
fileHost//存储的文件夹
); }
}catch (OSSException oe){
logger.error(oe.getMessage());
}catch (ClientException ce){
logger.error(ce.getErrorMessage());
}finally{
if(client!=null){
client.shutdown();
}
}
return null;
}
}
package com.aliyun.we; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile; import java.io.File;
import java.io.FileOutputStream; @RestController
public class UpLoadController { private final Logger logger = LoggerFactory.getLogger(getClass()); @Autowired
private AliyunOSSUtil aliyunOSSUtil; /** 文件上传*/
@RequestMapping(value = "/uploadFile")
public FileDTO uploadBlog(@RequestParam("file") MultipartFile file) {
logger.info("文件上传");
String filename = file.getOriginalFilename();
System.out.println(filename); try {
// 判断文件
if (file!=null) {
if (!"".equals(filename.trim())) {
File newFile = new File(filename);
FileOutputStream os = new FileOutputStream(newFile);
os.write(file.getBytes());
os.close();
file.transferTo(newFile);
// 上传到OSS
return aliyunOSSUtil.upLoad(newFile);
} }
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
}
postman 返回
{
"fileSize": 190280,
"fileAPUrl": "test/2019-08-06/5ea96123bc3f4fa0a30560ae6aa2f285-WX20190806-151311@2x.png",
"webUrl": "https://tzqimg.oss-cn-hangzhou.aliyuncs.com/test/2019-08-06/5ea96123bc3f4fa0a30560ae6aa2f285-WX20190806-151311@2x.png",
"fileSuffix": "png",
"fileBucket": "",
"oldFileName": "tzqimg",
"folder": "test"
}
springboot 集成oss的更多相关文章
- springboot集成oss阿里云存储
一.注册阿里云 二.购买OSS 三.创建桶 设定权限,其它默认即可 四.创建目录 点击桶名,进入创建目录即可. 五.开发文档 引入依赖: <dependency> <groupId& ...
- 【springBoot】springBoot集成redis的key,value序列化的相关问题
使用的是maven工程 springBoot集成redis默认使用的是注解,在官方文档中只需要2步; 1.在pom文件中引入即可 <dependency> <groupId>o ...
- SpringBoot集成security
本文就SpringBoot集成Security的使用步骤做出解释说明.
- springboot集成Actuator
Actuator监控端点,主要用来监控与管理. 原生端点主要分为三大类:应用配置类.度量指标类.操作控制类. 应用配置类:获取应用程序中加载的配置.环境变量.自动化配置报告等与SpringBoot应用 ...
- SpringBoot集成Shiro并用MongoDB做Session存储
之前项目鉴权一直使用的Shiro,那是在Spring MVC里面使用的比较多,而且都是用XML来配置,用Shiro来做权限控制相对比较简单而且成熟,而且我一直都把Shiro的session放在mong ...
- SpringBoot集成redis的key,value序列化的相关问题
使用的是maven工程 springBoot集成redis默认使用的是注解,在官方文档中只需要2步; 1.在pom文件中引入即可 <dependency> <groupId>o ...
- springboot集成mybatis(二)
上篇文章<springboot集成mybatis(一)>介绍了SpringBoot集成MyBatis注解版.本文还是使用上篇中的案例,咱们换个姿势来一遍^_^ 二.MyBatis配置版(X ...
- springboot集成mybatis(一)
MyBatis简介 MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到了google code,并且改名为MyB ...
- springboot集成redis(mybatis、分布式session)
安装Redis请参考:<CentOS快速安装Redis> 一.springboot集成redis并实现DB与缓存同步 1.添加redis及数据库相关依赖(pom.xml) <depe ...
随机推荐
- Xcode10报错 library not found for -lstdc++ 问题解决
在Xcode9上正常编译的项目,在Xcode10上编译可能会遇到如下错误: library not found for -lstdc++.6.0.9 library not found for -ls ...
- python中单下划线和双下划线的区别
1.python中双下划线(__str__)代表这个变量是特殊变量,是可以直接访问的 __xxx___ 定义的是特列方法.像__init__之类的 2.python前面双划线(__name)代表这个变 ...
- NumericStream && Stream综合练习
一.NumericStream 我们可以将一个Stream转化为对应的数字Stream,如mapToInt.mapToLong转化为IntStream.LongStream等(NumericStrea ...
- Linux_SystemLogManager
目录 目录 前言 日志管理journalctl工具 日志服务属性 自定义日志 journalctl 指令 前言 还是RHEL7的新特性,引入了journalctl指令作为系统日志的管理工具. 日志管理 ...
- 12 oracle 数据库坏块--物理坏块-ORA-01578/ORA-01110
oracle 数据库坏块--物理坏块 数据坏块的类型物理坏块:通常是由于硬件损坏如磁盘异常导致.内存有问题.存储链有问题. IO有问题.文件系统有问题. Oracle本身的问题等逻辑坏块:可能都是软件 ...
- Scala类和对象
1.面向对象 Scala的类与java.C++的一些比起来更简洁,速度更快 对象:使用object关键字修饰的 类:使用class关键字修饰的new Person()实例对象 new类:类的实例(对象 ...
- 【MM系列】SAP MM模块-打开前面物料账期的方法
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]在SAP里查看数据的方法 前言部 ...
- GCC 环境变量 & eclipse CDT 头文件配置
转:http://blog.csdn.net/statdm/article/details/7751000 GCC 环境变量 & eclipse CDT 头文件配置 在unix 下使用e ...
- HashMap中确定数组位置为什么要用hash进行扰动
HashMap数据存储的过程先根据key获得hash值,通过 (n - 1) & hash 判断当前元素存放的位置(这里的 n 指的是数组的长度),如果当前位置存在元素的话,就判断该元素与要存 ...
- 关于Maven的安装和配置
1.Maven的介绍 1.Maven是一个项目管理工具(项目对象模型POM) 2.Maven可以管理项目中的jar包依赖 3.Maven的中央仓库地址 http://mvnrepository.com ...