首先,这不是一个完成的搭建项目图床的文章;这是我面试过程中遇到的一个问题,总结一下并在此记录。

上次面试面试官问我项目中如何实现云存储的,我简略回答是通过文件流转换为base64格式然后上传到七牛云空间,被追问中间流的具体变化没答上来,这场面试挂掉虽然应不只是因为这个问题,但这个问题导致面试官认为我的项目不是自己完成的。

conroller类中调用到图片上传的类

@PostMapping("/personal")public String personal(HttpSession session, String name, String introduction, @RequestParam("file") MultipartFile file) throws IOException {String path = null;// 获取文件的名称String fileName = file.getOriginalFilename();// 使用工具类根据上传文件生成唯一图片名称String imgName = UUID.randomUUID().toString() + fileName;if (!file.isEmpty()) {FileInputStream inputStream = (FileInputStream) file.getInputStream();path = QiNiuUtil.uploadQNImg(inputStream, imgName);System.out.print("七牛云返回的图片链接:" + path);}User user = (User) session.getAttribute("user");user.setName(name);if (path != null) {user.setAvatar(path);}user.setIntroduction(introduction);userMapper.updateById(user);return "redirect:/manage?uid=" + user.getId();}

简单说:通过使用SpringMVC 类包MultipartFile类中getInputStream()方法读取返回文件流赋值给inputStream对象 (通过类包java.io中FileInputStream 新建的);然后调用QiNiuUtil.uploadQNImg(inputStream, imgName)七牛工具类以字节流形式上传图片文件,并返回可以直链访问云存储的图片地址     FileInputStream 创建对象这个过程比较复杂有点看不懂,有看的懂的大佬请指点一二;

注意:首先,这个流转换要明晰 MultipartFile 是SpringMVC类包

图片名定义:通过package org.springframework.web.multipart类调用 getOriginalFilename()   获取文件名,而后通过 UUID.randomUUID()  生成16位唯一随机码然后拼接文件名生成新的图片名称用于上传

上传:通过 isEmpty()  判断图片是否为空,为空的话返回false不进行上传;通过 getInputStream()  (依旧是multipart类中方法)   获取字节流赋值给通过 java.io.FileOutputStream 创建的 inputStream 对象并调用QiNiuUtil.uploadQNImg() 进行图片上传操作

package org.springframework.web.multipart;

java.io.File

QiNiuUtil(控制上传)

这里只粘贴了uploadQNImg这个方法,具体的七牛配置类可以网上搜 这里贴一个参考吧:Springboot整合七牛类

public static String uploadQNImg(FileInputStream file, String key) {// 构造一个带指定Zone对象的配置类, 注意这里的Zone.zone0需要根据主机选择UploadManager uploadManager = new UploadManager(new Configuration(Zone.zone1()));Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY );// 根据命名空间生成的上传tokenString path=null;String token = auth.uploadToken(BUCKETNAME);try{// 上传图片文件Response res = uploadManager.put(file, key, token, null, null);if (!res.isOK()) {throw new RuntimeException("上传七牛出错:" + res.toString());}// 解析上传成功的结果DefaultPutRet putRet = new Gson().fromJson(res.bodyString(), DefaultPutRet.class);path = DOMAIN + "/" + putRet.key;// 这个returnPath是获得到的外链地址,通过这个地址可以直接打开图片}catch (QiniuException e){e.printStackTrace();}return "http://"+path;}

获取FileInputStream  创建的file 然后以 七牛的配置类生成对象存放file以及key值等信息

上传前通过isOK()方法判断状态码正常则上传并返回一个可直接访问的外链地址

Springboot项目中图片云存储实现思路相关推荐

  1. SpringBoot项目中图片加载失败

    SpringBoot项目中图片加载失败 这个原因有很多,比如你的拦截器,过滤了静态资源. 如果你感觉自己的前端代码没有问题,配置也没有问题,可能是由于你后期导入的图片还没有被加载到target文件夹中 ...

  2. SpringBoot项目中图片的引用

    问题描述:在SpringBoot项目中需要在CSS样式文件中引入图片给某个元素设置样式 解决办法: body{background-image: url("../image/580.jpg& ...

  3. SpringBoot项目中华为云 内容审核的使用(内附代码)

    前段时间在做一个在线社交的项目,里面就有一个用户发布动态的功能,发布动态就需要审核,于是我就选择了华为云来对用户发布的动态进行审核,以下附上华为云的地址 华为云-内容审核 内容审核_内容检测 _内容风 ...

  4. 亲测简单易懂可用:阿里云OSS入门实战2(集成到SpringBoot项目中存放用户头像)

    亲测简单易懂可用:阿里云OSS入门实战2(集成到SpringBoot项目中存放用户头像) 大噶好,我们继续延续上一章,学习如何使用OSS存放用户头像代码示例; 在application.propert ...

  5. SpringBoot项目中可以上传图片,但图片加载失败

    目录 项目场景: 问题描述 原因分析: 解决方案: 项目场景: 最近有个Springboot项目的图片不显示 问题描述 在项目中,可以上传图片,但加载失败 系统运行正常: 在添加图片的位置中,可以选择 ...

  6. springboot项目中使用shiro 自定义过滤器和token的方式___shiro使用token登录流程

    springboot项目中使用shiro 自定义过滤器和token的方式 实现步骤主要是以下几步: 1. 在项目中导入maven依赖 <dependency><groupId> ...

  7. Java项目部署到云服务器的思路

    Java项目部署到云服务器的思路 1 部署项目的前提条件 1.1 购买云服务器 我购买的是腾讯云的服务器,第一年享优惠88一年 cpu好像两核的,作为入门级的也算够用了 如果第二年该续费的时候,我记得 ...

  8. springboot项目整合阿里云oss的内容审核

    springboot项目整合阿里云 内容审核 第一 添加依赖 <dependency><groupId>com.aliyun</groupId><artifa ...

  9. SpringBoot项目中集成第三方登录功能

    SpringBoot项目中集成第三方登录功能 引言 1 环境准备 2 代码实现 3 第三方平台认证申请 4 打包和部署项目 5 第三方平台登录认证测试 6 参考文章 引言 最近想把自己在公众号上介绍过 ...

  10. SpringBoot集成腾讯云存储COS服务

    前言 该文章会先简单的介绍一下腾讯云的COS存储,然后演示如何在SpringBoot项目中集成COS,每一步都有记录,保证初学者也能看懂. 文章目录 前言 1.腾讯云对象存储介绍 1.1.开通&quo ...

最新文章

  1. pyqt tableWidget 单元格设置颜色
  2. Rundll32使用技巧
  3. 小猿圈web前端之网站性能优化方案
  4. 【研究方向是SDN该怎么做?】软件定义网络(SDN)的安全挑战和机遇
  5. 强势回归丨2021数据库大咖讲坛(第1期):数据库高可用容灾方案的实践与探索
  6. linux 中文乱码 转png_使用pdfBox实现pdf转图片,解决中文方块乱码等问题
  7. Understand-4.0.877-Linux-64bit.tgz最新版本2017年源代码阅读利器,养眼theme之配置
  8. C# 连接sql 2005
  9. 1071 Speech Patterns
  10. VC2005编译安装QT
  11. 《机器视觉算法与应用》第3章 机器视觉算法之图像增强——学习笔记
  12. Windows Server 2008 R2 免费使用900天的方法
  13. easyExcel去除网格线【完美解决】
  14. RISC_V芯片架构
  15. 面对裁员潮,程序员如何安身立命
  16. 下拉刷新?我看好MaterialRefreshLayout!
  17. 职称计算机ppt教程,职称计算机:Word文档转为PPT的两种方法
  18. 【C++】cout、cerr、clog之间的区别
  19. 搭建一个完整的javaweb项目
  20. 如何打开已经 force-push 的 PR (branch was force-pushed or recreated)

热门文章

  1. Win10 wifi、蓝牙打不开
  2. “ORA-00932: 数据类型不一致: 应为 -, 但却获得 CLOB “一种情况的解决
  3. C语言|temp=a,a=b,b=temp;|同行语句可以用逗号隔开
  4. 资源池、虚拟机、集群的关系
  5. 【EasyUI】如何根据条件控制可编辑表格某字段是否可以编辑;
  6. 163邮箱如何开启pop服务器端口,pop3端口号详情介绍
  7. 基于.net实现F4一键杀死指定进程(龙之谷秒掉器)
  8. 北京邮电大学计算机学院2020复试,预览北京邮电大学计算机学院2020研究生复试流程...
  9. 第一章(1.2) 机器学习算法工程师技能树
  10. latex插入参考文献技巧