SpringBoot(24) 整合七牛云实现文件上传
一、前言
本文将基于springboot2.1.8.RELEASE
整合七牛云
实现文件上传
本文参考 https://www.keppel.fun/articles/2019/02/27/1551262881214.html
二、准备(AccessKey
、SecretKey
、对象储存空间名称
、存储区域
、访问域名
)
1、先到七牛云官网获取AccessKey/SecretKey
温馨小提示:没有账号的可以先注册一个使用~
2、在对象储存中创建一个空间,然后拿到存储空间名称
、存储区域
、访问域名
温馨小提示:这里只是为了体验七牛云的文件上传功能,在访问控制处可暂时选择公开,后面是可以修改权限的,不用担心~
新建成功之后,七牛云给了一个测试域名可供使用一个月
三、SpringBoot集成七牛云
1、pom.xml
中引入依赖
<!-- https://mvnrepository.com/artifact/com.qiniu/qiniu-java-sdk -->
<dependency><groupId>com.qiniu</groupId><artifactId>qiniu-java-sdk</artifactId><version>7.2.28</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.5</version>
</dependency>
2、application.yml
中配置七牛云
# ========================== ↓↓↓↓↓↓ 七牛云配置 ↓↓↓↓↓↓ ==========================
qiniu:accessKey: xxxsecretKey: xxx# 对象储存bucket: zhengqingya # 空间名称zone: huadong # 存储区域domain: q6nf5vyrf.bkt.clouddn.com # 访问域名
3、七牛云配置类
@Configuration
public class QiniuConfig {@Value("${qiniu.accessKey}")private String accessKey;@Value("${qiniu.secretKey}")private String secretKey;@Value("${qiniu.zone}")private String zone;/*** 配置空间的存储区域*/@Beanpublic com.qiniu.storage.Configuration qiNiuConfig() {switch (zone) {case "huadong":return new com.qiniu.storage.Configuration(Zone.huadong());case "huabei":return new com.qiniu.storage.Configuration(Zone.huabei());case "huanan":return new com.qiniu.storage.Configuration(Zone.huanan());case "beimei":return new com.qiniu.storage.Configuration(Zone.beimei());default:throw new MyException("存储区域配置错误");}}/*** 构建一个七牛上传工具实例*/@Beanpublic UploadManager uploadManager() {return new UploadManager(qiNiuConfig());}/*** 认证信息实例*/@Beanpublic Auth auth() {return Auth.create(accessKey, secretKey);}/*** 构建七牛空间管理实例*/@Beanpublic BucketManager bucketManager() {return new BucketManager(auth(), qiNiuConfig());}@Beanpublic Gson gson() {return new Gson();}}
4、编写文件上传与删除方法
服务类:
public interface IQiniuService {/*** 以文件的形式上传** @param file* @param fileName:* @return: java.lang.String*/String uploadFile(File file, String fileName) throws QiniuException;/*** 以流的形式上传** @param inputStream* @param fileName:* @return: java.lang.String*/String uploadFile(InputStream inputStream, String fileName) throws QiniuException;/*** 删除文件** @param key:* @return: java.lang.String*/String delete(String key) throws QiniuException;}
服务实现类:
@Service
public class QiniuServiceImpl implements IQiniuService, InitializingBean {@Autowiredprivate UploadManager uploadManager;@Autowiredprivate BucketManager bucketManager;@Autowiredprivate Auth auth;@Value("${qiniu.bucket}")private String bucket;@Value("${qiniu.domain}")private String domain;/*** 定义七牛云上传的相关策略*/private StringMap putPolicy;@Overridepublic String uploadFile(File file, String fileName) throws QiniuException {Response response = this.uploadManager.put(file, fileName, getUploadToken());int retry = 0;while (response.needRetry() && retry < 3) {response = this.uploadManager.put(file, fileName, getUploadToken());retry++;}if (response.statusCode == 200) {return "http://" + domain + "/" + fileName;}return "上传失败!";}@Overridepublic String uploadFile(InputStream inputStream, String fileName) throws QiniuException {Response response = this.uploadManager.put(inputStream, fileName, getUploadToken(), null, null);int retry = 0;while (response.needRetry() && retry < 3) {response = this.uploadManager.put(inputStream, fileName, getUploadToken(), null, null);retry++;}if (response.statusCode == 200) {return "http://" + domain + "/" + fileName;}return "上传失败!";}@Overridepublic String delete(String key) throws QiniuException {Response response = bucketManager.delete(this.bucket, key);int retry = 0;while (response.needRetry() && retry++ < 3) {response = bucketManager.delete(bucket, key);}return response.statusCode == 200 ? "删除成功!" : "删除失败!";}@Overridepublic void afterPropertiesSet() throws Exception {this.putPolicy = new StringMap();putPolicy.put("returnBody", "{\"key\":\"$(key)\",\"hash\":\"$(etag)\",\"bucket\":\"$(bucket)\",\"width\":$(imageInfo.width), \"height\":${imageInfo.height}}");}/*** 获取上传凭证*/private String getUploadToken() {return this.auth.uploadToken(bucket, null, 3600, putPolicy);}}
四、测试文件上传与删除
@RunWith(SpringRunner.class)
@SpringBootTest(classes = DemoApplication.class)
public class QiniuTest {@Autowiredprivate IQiniuService qiniuService;@Testpublic void testUpload() throws QiniuException {String result = qiniuService.uploadFile(new File("D:\\IT_zhengqing\\image\\helloworld.jpg"), "helloworld");System.out.println("访问地址: " + result);}@Testpublic void testDelete() throws QiniuException {String result = qiniuService.delete("helloworld");System.out.println(result);}}
本文案例demo源码
https://gitee.com/zhengqingya/java-workspace
SpringBoot(24) 整合七牛云实现文件上传相关推荐
- html七牛云图片文件上传,使用Js将文件图片视频上传到七牛云详细教程-Fun言
前言 因为项目需要,需要将一些较大文件上传到七牛云,以前都是通过数据流上传到服务端,然后在服务端进行上传操作,因为以前文件都很小所以无所谓,但是要是几百M的文件就不行了,所以就采用前端js直接上传到七 ...
- ThinkPHP5.0+七牛云SDK文件上传
一.问:为什么建议大家使用对象存储 对象存储可以简单理解为用来存储图片.音频.视频等非结构化数据的数据池.相对于主机服务器,具有读写速度快,利于分享的特点.我为什么建议大家使用对象存储?我总结了这六点 ...
- 使用七牛云进行文件上传
目录 一.七牛云入门测试 1.注册七牛云账号,完成后选择对象存储 2.在里面创建空间,一个空间相当于一个文件夹,就是将对象上传到的地方 3.查看个人秘钥,注册完成账号后,会有一个秘钥,上传文件的时候进 ...
- php文件上传七牛云,PHP 文件上传七牛云
PHP 之Laravel 使用qiniu/php-sdk, itbdw/laravel-storage-qiniu, 组件上传文件到七牛云. 一. 序言 这几天在laravel 框架上使用qiniu ...
- springboot+vue+element+七牛云+实现图片上传功能
注册七牛云 链接地址: https://www.qiniu.com/products/kodo,免费有10G空间与免费一个月的域名地址注册后,开启对象存储,创建空间选择地区, 上传方式: 1:前端现将 ...
- (七牛云系列)七牛云指定文件上传路径(各种语言通用)
目录 解决方法 一个实例 解决方法 方法很简单 假如你有一个文件名为xxx.jpg 同时你在七牛云中有一个文件夹为cs 则你在上传文件时,需要将文件名修改为cs/xxx.jpg,七牛云会自动识别,并放 ...
- SpringBoot集成七牛云-实现文件上传、下载、解决报错、详细案例
用自己电脑做文件存储,我想没谁愿意了吧,来来和我一起白嫖吧,伙伴们!!!
- SpringBoot整合阿里云OSS文件上传、下载、查看、删除
SpringBoot整合阿里云OSS文件上传.下载.查看.删除 该项目源码地址:https://github.com/ggb2312/springboot-integration-examples ( ...
- MinIO入门-02 SpringBoot 整合MinIO并实现文件上传
SpringBoot 整合MinIO并实现文件上传 1.依赖 <!-- https://mvnrepository.com/artifact/io.minio/minio --> < ...
最新文章
- Chrome不支持showModalDialog的解决方案
- 第4次作业类测试代码+043+杨晨宇
- 深度学习神经网络都是从CNN和AlexNet开始的
- 贪心算法解决跳马问题_算法浅谈——怪盗基德的珠宝选择问题与贪心算法
- SAP UI5 应用开发教程之二十一 - SAP UI5 的自定义格式器(Custom Formatter)
- mysql 查看表v空间自增涨_mysql文件结构及InnoDB引擎表空间整理
- 可以叫板Google的一个搜索引擎 —— DuckDuckGo
- 弹出窗弹出两次的原因
- 在經歷了8個Beta版和1個RC版後
- linux如何安装php,Linux下如何安装配置PHP
- HTTP Keep-Alive的作用
- 9.企业应用架构模式 --- 领域逻辑模式
- 国开电大 财务报表分析 形考任务
- android6.0相机假对焦,android相机对焦
- 苹果手机内存不够白屏
- Android 仿微信通讯录 导航分组列表-上】使用ItemDecoration为RecyclerView打造带悬停头部的分组列表
- mac java串口驱动,使用CH340/341的模块在Mac上驱动安装
- python-flask-制作网页入门1
- css自动均匀分布,如何在CSS中均匀分布?
- LeetCode总结——题1313、66、169、209