技术标签: 微服务 文件存储方案 阿里云oss 服务搭建 springboot 项目经验
经过一番纠结,最后决定,项目所有的文件资源还是单独放阿里云的oss上比较好,以下是这个文件系统的微服务模块搭建过程。
全称阿里云对象存储OSS
阿里云oss其实就是阿里云提供的类型云盘的服务,收费也还算合理,一般小项目使用简直香的不行啊,哈哈哈~
由于是阿里的产品,不管是技术上,还是服务上,体验都非常良好。
如果想在项目中使用OSS,需要提供要访问的Bucket的四个参数,分别是:
endpoint:终端地址 在Bucket实例的概览里面可以看到。
bucketname:Bucket名称 你的Bucket的全称。
keyid,keysecret:身份验证的密钥 在控制台的主页可以看到入口,
<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=8002
#服务名
spring.application.name=service-oss
#环境设置:dev、test、prod
spring.profiles.active=dev
#阿里云 OSS
#不同的服务器,地址不同
aliyun.oss.file.endpoint=
aliyun.oss.file.keyid=
aliyun.oss.file.keysecret=
#bucket可以在控制台创建,也可以使用java代码创建
aliyun.oss.file.bucketname=
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
//当项目已启动,spring接口,spring加载之后,执行接口一个方法
@Component
public class ConstantPropertiesUtils 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_POIND;
public static String ACCESS_KEY_ID;
public static String ACCESS_KEY_SECRET;
public static String BUCKET_NAME;
public ConstantPropertiesUtils() {
}
@Override
public void afterPropertiesSet() throws Exception {
END_POIND = endpoint;
ACCESS_KEY_ID = keyId;
ACCESS_KEY_SECRET = keySecret;
BUCKET_NAME = bucketName;
}
}
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@ComponentScan(basePackages = {
"com.gfbbs"})
public class OssApplication {
public static void main(String[] args) {
SpringApplication.run(OssApplication.class, args);
}
}
public interface OssService {
//上传普通文件方法
String uploadFileAvatar(MultipartFile file);
}
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
import java.util.UUID;
@Service
public class OssServiceImpl implements OssService {
//上传普通文件的方法
@Override
public String uploadFileAvatar(MultipartFile file) {
// 工具类获取值
String endpoint = ConstantPropertiesUtils.END_POIND;
String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;
String bucketName = ConstantPropertiesUtils.BUCKET_NAME;
try {
// 创建OSS实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
//获取上传文件输入流
InputStream inputStream = file.getInputStream();
//获取文件名称
String fileName = file.getOriginalFilename();
//1 在文件名称里面添加随机唯一的值
String uuid = UUID.randomUUID().toString().replaceAll("-","");
fileName = uuid+fileName;
//2 把文件按照日期进行分类
//获取当前日期
String datePath = new DateTime().toString("yyyy/MM/dd");
//拼接
fileName = datePath+"/"+fileName;
//调用oss方法实现上传
//第一个参数 Bucket名称
//第二个参数 上传到oss文件路径和文件名称
//第三个参数 上传文件输入流
ossClient.putObject(bucketName,fileName , inputStream);
// 关闭OSSClient。
ossClient.shutdown();
//把上传之后文件路径返回
//需要把上传到阿里云oss路径手动拼接出来
String url = "https://"+bucketName+"."+endpoint+"/"+fileName;
return url;
}catch(Exception e) {
e.printStackTrace();
return null;
}
}
}
代码整体思路:
细节部分:
import com.gfbbs.commonutils.R;
import com.gfbbs.oss.service.OssService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
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;
@RestController
@RequestMapping("/eduoss/fileoss")
@CrossOrigin
public class OssController {
@Autowired
private OssService ossService;
//上传头像的方法
@PostMapping
public R uploadOssFile(MultipartFile file) {
//获取上传文件 MultipartFile
//返回上传到oss的路径
String url = ossService.uploadFileAvatar(file);
return R.ok().data("url",url);
}
}
注意:
文章浏览阅读1.8w次,点赞2次,收藏4次。报错git push 到 Github 的时候出现异常:fatal: unable to access 'https://github.com/huihut/interview.git/': error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol versionPushing to https:/..._github 不支持 tls 1.1.2
文章浏览阅读2.8k次,点赞7次,收藏33次。(1)掌握通信信号调制过程及实现原理;(2)了解设计中的优化方案;(3)进一步学习复杂数字系统设计;(4)培养工程思维及创新思维。(1)实现单路PWM 信号模块,可通过端口设置初始相位,频率,占空比;(2)通过模块调用方法,实现三路PWM信号输出,分辨展示相位,频率,占空比可调;(3)加入正弦波形VTH(t)实现SPWM波形;1.顶层文件代码限于篇幅,此处仅给出顶层代码。_fpga pwm
文章浏览阅读423次。《Thinking in UML》学习总结@(总结)[思考|学习|记录]Thinking in UML学习总结简要面向过程和面向对象面向过程面向对象建模公式用例驱动抽象层次视图对象分析的方法获取需求定义边界发现主角获取业务用例业务建模业务用例场景业务用例规约业务规则业务对象模型业务用例实现视图业务用例实现场景包图领域模型提取业务_用例规约的分支过程描述
文章浏览阅读170次。Maven导包小插曲问题一:尝试解决方法解决方法问题二:解决方法问题三:解决方法pom配置冒红小技巧问题一:为什么Maven用pom配置后,可以在本地仓库看见导进来的文件夹,但没看见到jar包,只能看见尾缀为lastUpdated的文件。尝试解决方法一开始以为是未配置maven镜像,使用的是原来默认的,太慢了,没下载成功的原因,因为之前使用是不会的。后来发现是自己默认选择用的.m2的settings原因,换成idea自带maven3中setting,又不行。解决方法①换完setting后还需要进
文章浏览阅读2.9k次,点赞7次,收藏10次。最近在利用springboot+vue整合开发一个前后端分离的个人博客网站,所以这一篇总结一下在开发中遇到的一个问题,关于解决在使用vue和springboot在开发前后端分离的项目时,如何解决跨域问题。在这里分别分享两种方法,分别在前端vue中解决和在后台springboot中解决。浏览器同源策略为什么会出现跨域问题? 首先一个定义一定要了解,就是浏览器的同源策略,什么是浏览器的同源策略, 简单..._springboot vue 跨域
文章浏览阅读4.5k次,点赞2次,收藏19次。目录一、引言二、DRM框架介绍三、DRM框架的使用四、源码分析一、引言Android4开始,hdmi等视频输出框架开始由framebuffer想DRM迁移,今天我们就来简单分析下DRM框架二、DRM框架介绍DRM是一个内核级的设备驱动,具体的说是显卡驱动的一种架构源码位置因为Linux kernel内部接口和数据结构可能随时发生变化,所以DRI模块要针对特定的内核版本进行编译。kernel 2.6.26之后的版本,DRM(DRI kernel模块)源码存放在kernel/drivers/_嵌入式linux hdmi视频环出功能实现
文章浏览阅读6.3k次,点赞3次,收藏4次。android常见对文本处理的方法,及Html.fromHtml(),SpannableString的详细使用和注意事项_android html.fromhtml
文章浏览阅读431次。Spring Cloud微服务架构优化实践,高效稳定的分布式系统构建一、简介1. Spring Cloud 微服务架构2. 微服务架构的发展和优势优化实践的意义和重要性二、优化实践1. 微服务治理的优化1.1 服务注册与发现1.2 负载均衡1.3 服务容错和故障转移2. 服务调用的优化2.1 服务调用方式的选择服务调用的高效性和稳定性服务调用的安全性和可控性3. 数据访问的优化数据库访问的优化策略数据库集群的部署和管理数据库访问的安全性和可控性4. 配置管理的优化4.1 配置中心的选择和使用配置管理的高效性_如何优化部署微服务项目
文章浏览阅读334次,点赞10次,收藏10次。运行环境开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven项目介绍。
文章浏览阅读1.1w次,点赞4次,收藏12次。项目的需求其实很简单,就是需要把doc这些文档转换成pdf,然后提供在线预览。我这边的思路是:使用pdf.js做为预览控件,后台转换后直接传给控件。具体如下:1、下载pdf.js,然后直接丢到自己的项目里2、前端搞一个object,用来做为内嵌显示,当然嫌麻烦的也可以直接打开个新窗口,想怎么玩都可以:我这里的data用的是Vue动态绑定,点击不同文件时,就预览对应的文件..._org.jodconverter.core.office.officeexception: local conversion failed
文章浏览阅读9.4k次,点赞2次,收藏4次。目录一、前言二、点到线段的最短距离——向量法三、点到直线的最短距离——直线法四、点到直线最短距离——向量法一、前言 其实在工程应用中很多情况下计算点到直线或者点到线段的距离,比如在unity3d游戏软件设计中计算任意形状路径起点和终点连线距离最远的点,比如用于雷达聚类后在跟踪算法中计算哪个sensor距离最近,另外还需要知道要计算的点位于直线的哪一侧,这些计算在游戏开发或者数字信号后处理要求实时性,因此需要高效的运算。这里记录一下几种计算方法,方便需要时回忆。二、..._点到向量的距离公式
文章浏览阅读66次。Sublime Text 3 全程详细图文原创教程(持续更新中。。。)[摘要:1、 媒介 应用Sublime Text 也有几个岁首了,版本也从2进级到3了,但如同冷天饮冰火,热热尽自知。最后也是没有晓得从何动手,谦天下天查找材料,但能查阅到的材料,苦于它们的零星]一、前言 使用Sublime Text 也有几个年头了,版本也从2升级到3了,但犹如寒天饮冰水,...