一、前言

本文将基于springboot2.1.8.RELEASE整合七牛云实现文件上传

本文参考 https://www.keppel.fun/articles/2019/02/27/1551262881214.html

二、准备(AccessKeySecretKey对象储存空间名称存储区域访问域名)

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) 整合七牛云实现文件上传相关推荐

  1. html七牛云图片文件上传,使用Js将文件图片视频上传到七牛云详细教程-Fun言

    前言 因为项目需要,需要将一些较大文件上传到七牛云,以前都是通过数据流上传到服务端,然后在服务端进行上传操作,因为以前文件都很小所以无所谓,但是要是几百M的文件就不行了,所以就采用前端js直接上传到七 ...

  2. ThinkPHP5.0+七牛云SDK文件上传

    一.问:为什么建议大家使用对象存储 对象存储可以简单理解为用来存储图片.音频.视频等非结构化数据的数据池.相对于主机服务器,具有读写速度快,利于分享的特点.我为什么建议大家使用对象存储?我总结了这六点 ...

  3. 使用七牛云进行文件上传

    目录 一.七牛云入门测试 1.注册七牛云账号,完成后选择对象存储 2.在里面创建空间,一个空间相当于一个文件夹,就是将对象上传到的地方 3.查看个人秘钥,注册完成账号后,会有一个秘钥,上传文件的时候进 ...

  4. php文件上传七牛云,PHP 文件上传七牛云

    PHP 之Laravel 使用qiniu/php-sdk, itbdw/laravel-storage-qiniu, 组件上传文件到七牛云. 一.  序言 这几天在laravel 框架上使用qiniu ...

  5. springboot+vue+element+七牛云+实现图片上传功能

    注册七牛云 链接地址: https://www.qiniu.com/products/kodo,免费有10G空间与免费一个月的域名地址注册后,开启对象存储,创建空间选择地区, 上传方式: 1:前端现将 ...

  6. (七牛云系列)七牛云指定文件上传路径(各种语言通用)

    目录 解决方法 一个实例 解决方法 方法很简单 假如你有一个文件名为xxx.jpg 同时你在七牛云中有一个文件夹为cs 则你在上传文件时,需要将文件名修改为cs/xxx.jpg,七牛云会自动识别,并放 ...

  7. SpringBoot集成七牛云-实现文件上传、下载、解决报错、详细案例

    用自己电脑做文件存储,我想没谁愿意了吧,来来和我一起白嫖吧,伙伴们!!!

  8. SpringBoot整合阿里云OSS文件上传、下载、查看、删除

    SpringBoot整合阿里云OSS文件上传.下载.查看.删除 该项目源码地址:https://github.com/ggb2312/springboot-integration-examples ( ...

  9. MinIO入门-02 SpringBoot 整合MinIO并实现文件上传

    SpringBoot 整合MinIO并实现文件上传 1.依赖 <!-- https://mvnrepository.com/artifact/io.minio/minio --> < ...

最新文章

  1. Chrome不支持showModalDialog的解决方案
  2. 第4次作业类测试代码+043+杨晨宇
  3. 深度学习神经网络都是从CNN和AlexNet开始的
  4. 贪心算法解决跳马问题_算法浅谈——怪盗基德的珠宝选择问题与贪心算法
  5. SAP UI5 应用开发教程之二十一 - SAP UI5 的自定义格式器(Custom Formatter)
  6. mysql 查看表v空间自增涨_mysql文件结构及InnoDB引擎表空间整理
  7. 可以叫板Google的一个搜索引擎 —— DuckDuckGo
  8. 弹出窗弹出两次的原因
  9. 在經歷了8個Beta版和1個RC版後
  10. linux如何安装php,Linux下如何安装配置PHP
  11. HTTP Keep-Alive的作用
  12. 9.企业应用架构模式 --- 领域逻辑模式
  13. 国开电大 财务报表分析 形考任务
  14. android6.0相机假对焦,android相机对焦
  15. 苹果手机内存不够白屏
  16. Android 仿微信通讯录 导航分组列表-上】使用ItemDecoration为RecyclerView打造带悬停头部的分组列表
  17. mac java串口驱动,使用CH340/341的模块在Mac上驱动安装
  18. python-flask-制作网页入门1
  19. css自动均匀分布,如何在CSS中均匀分布?
  20. LeetCode总结——题1313、66、169、209

热门文章

  1. 山东北方盐化MT4交易系统 v4.00.940官方版
  2. CSRF Failed: Referer checking failed - no Referer
  3. LIS和LIMS有什么区别?
  4. 天空卫士成为首批通过分类分级工具测评的厂商
  5. 基于directShow,打造全能播放器系列之一
  6. 人文社科与AI交叉融合?人大这个学院够新颖
  7. kernel:dtsgpio几种常见设定的pinctrl配置
  8. C语言练习——跑步锻炼
  9. 漂亮的UI库集合 wasabeef/awesome-android-ui
  10. 手机去水印工具一键去除水印