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 ...
随机推荐
- eigen 中四元数、欧拉角、旋转矩阵、旋转向量
一.旋转向量 1.0 初始化旋转向量:旋转角为alpha,旋转轴为(x,y,z) Eigen::AngleAxisd rotation_vector(alpha,Vector3d(x,y,z)) 1. ...
- iOS11最新隐私信息访问列表
今天早上应用出现拍照上传闪退的紧急bug,才发现在iOS11中,隐私权限配置又发生了改变,将原来的相册访问权限分开了,现在有读写两种权限. iOS11访问权限列表 隐私数据 对应key值 提示语 相册 ...
- 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_1 回顾Mybatis的环境搭建-实现查询所有功能
先回顾Mybits的环境搭建,. 直接next 直接点击finish 创建好的项目. 所有东西都自己写不现实,约束文件的头部还是拷贝过来 导入依赖坐标,Mybits mysql的驱动 log4j 单元 ...
- 004-Django 关于 templates的部分操作
Django 模版 {% %} 为django模版语言标签,用于加载文件 {{ }} 为django模版语言标签,用于定义显示变量 for循环 {% for user in users %} < ...
- 使用itchat完成微信自动回复
import itchat from itchat.content import * # 微信自动回复 @itchat.msg_register([TEXT]) def text_reply(msg) ...
- 第九周课程总结&实验报告七
实验任务详情: 完成火车站售票程序的模拟. 要求: (1)总票数1000张: (2)10个窗口同时开始卖票: (3)卖票过程延时1秒钟: (4)不能出现一票多卖或卖出负数号票的情况. package ...
- [Git] 023 Re:从零开始的 rebase 命令
1. 开门见山 我新建了一个本地仓库,并进行了一些操作 当前情况 查看(直观但不明了) 上图的第二条 "log" 命令详见 [Git] 024 log 命令的补充 的 " ...
- 【Linux-设备树】编译器DTC
DTC编译器:设备树源码DTS文件编译为二进制文件DTB. DTC编译器的作用:就是对设备树的源码的文件进行语法检查,根据linux的内核要求检查各个节点以及属性,将设备树源码编译生成二进制文件,以保 ...
- 数位dp相关
经典的数位Dp是要求统计符合限制的数字的个数. 一般的形式是:求区间[n,m]满足限制f(1). f(2). f(3)等等的数字的数量是多少. 条件 f(i) 一般与数的大小无关,而与数的组成有关. ...
- Java8与JDK8和JDK1.8有什么区别?
JDK版本与发行时间 版本 名称 发行日期 JDK 1.0 Oak(橡树) 1996-01-23 JDK 1.1 none(无) 1997-02-19 JDK 1.1.4 Sparkler(宝石) 1 ...