项目中会用到大量的图片和小视频,为了分担服务器压力,将文件都放在七牛云。这里的思路很简单,

就是移动端、pc端把文件上传到服务器,服务器做一个临时缓存,保存必要的信息到数据库后,

将文件上传到七牛云,最后删除服务器的缓存。当然,也可以直接让移动端、pc端把文件上传到七牛云,

七牛云在返回信息给服务器,这种方法虽然更佳,但是敲起代码来有点麻烦,复杂。 

首先我们得到七牛云官网创建属于自己的空间

实名认证最后有大内存

登陆官网申请账号,然后建立对象储存空间Bucket 。

作为练习建立公开空间即可

若建立私有的将采取支付宝授权,授权后受到如下邮件信息

之后进入建立的空间则能看见相关信息

前期的准备工作大致就完成了。

本文章以Maven为Demo

在pom.xml中我们需要引入SDK

  1. <!-- 七牛云 -->
  2. <dependency>
  3. <groupId>com.qiniu</groupId>
  4. <artifactId>qiniu-java-sdk</artifactId>
  5. <version>7.1.1</version>
  6. </dependency>

然后我们创建一个七牛云工具类

  1. package com.dz147.Util;
  2.  
  3. import com.qiniu.common.QiniuException;
  4. import com.qiniu.http.Response;
  5. import com.qiniu.storage.UploadManager;
  6. import com.qiniu.util.Auth;
  7.  
  8. import java.io.IOException;
  9.  
  10. public class QiniuUtil {
  11. //设置需要操作的账号的AK和SK
  12. private static final String ACCESS_KEY = "";
  13. private static final String SECRET_KEY = "";
  14.  
  15. //要上传的空间
  16. private static final String bucketname = "picturestorage";
  17.  
  18. //密钥
  19. private static final Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
  20.  
  21. //普通上传
  22. public void upload(String filePath, String fileName) throws IOException {
  23. //创建上传对象
  24. UploadManager uploadManager = new UploadManager();
  25. try {
  26. //调用put方法上传
  27. Response res = uploadManager.put(filePath, fileName, auth.uploadToken(bucketname));
  28. //打印返回的信息
  29. System.out.println(res.bodyString());
  30. } catch (QiniuException e) {
  31. Response r = e.response;
  32. // 请求失败时打印的异常的信息
  33. //System.out.println(r.toString());
  34. try {
  35. //响应的文本信息
  36. System.out.println(r.bodyString());
  37. } catch (QiniuException e1) {
  38. //ignore
  39. }
  40. }
  41. }
  42. }

查看密匙

使用是这么一个思路首先前端我们传一个文件到后台(以添加图片为例)

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <style>
  7. </style>
  8. </head>
  9. <body>
  10. <form method="post" enctype="multipart/form-data">
  11. 选择要上传的文件:<br/>
  12. <input type="file" name="file" id="myFile"/><span></span>
  13. </form>
  14. <div id="bar">
  15. 上传进度:
  16. <progress id="pro" value="0"></progress>
  17. </div>
  18. <input type="button" id="upLoadSub" value="上传"/>
  19. <div>
  20. <img src="" alt="GG" id="myImg" width="200" height="160"/>
  21. </div>
  22.  
  23. </body>
  24. <script src="../js/jquery.js"></script>
  25. <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
  26. <script>
  27.  
  28. var myFile = document.getElementById("myFile");
  29. //绑定事件(ECMAScript6写法)
  30. myFile.addEventListener("change", () => {
  31. var file = myFile.files[0];
  32. //预览图片函数
  33. previewWithObjectURL(file);
  34. })
  35. //点击->图片上传 //axios轻量级 ajax API
  36. $("#upLoadSub").on("click", function () {
  37. var myFile = document.getElementById("myFile");
  38. var formData = new FormData();
  39. formData.append("file", myFile.files[0]);
  40. axios({
  41. method: 'post',
  42. url: '/addQiniu',
  43. data: formData
  44. }).then(function (response) {
  45. console.log(response.data);
  46. }).catch(console.error);
  47. });
  48.  
  49. //简单的图片预览建议使用第一种方式
  50. //URL方式(第一种方式)src = blob:http://localhost:8080/f720711f-57e2-428f-8a47-ec59e5dbbc10
  51. function previewWithObjectURL(file) {
  52. var url = URL.createObjectURL(file);
  53. var reader = new FileReader();
  54. reader.readAsDataURL(file);
  55. //请求完成后,显示图片
  56. reader.onloadend = function (event) {
  57. document.getElementById("myImg").src = url;
  58. }
  59. //上传过程中动态显示进度条
  60. reader.onprogress = function (event) {
  61. if (event.lengthComputable) {
  62. document.getElementById("pro").value = event.loaded / event.total;
  63. }
  64. }
  65. }
  66. </script>
  67. </html>

先把文件添加到image目录里

添加到后台服务器得到文件资源再往七牛云添加。

  1. //Controller部分
  2. @RequestMapping(value = "/addQiniu", method = RequestMethod.POST, produces = "application/json;charset=utf-8;")
  3. public @ResponseBody
  4. String qiniuyunAdd(MultipartFile file, Model model, HttpServletRequest request) {
  5. String realPath = request.getServletContext().getRealPath(File.separator + "imges");
  6. String qiniuPath = "";
  7. try {
  8. //上传文件方法返回重命名,文件名称
  9. String s = excels.upLoadImg(file, realPath);
  10. //添加成功后的绝对路径
  11. String thisPath = realPath + File.separator + s;
  12. //组合七牛云外链(七牛云生成域名+保存的文件KEY)
  13. qiniuPath = "http://pjv3h15g0.bkt.clouddn.com/" + s;
  14. QiniuUtil qiniuUtil = new QiniuUtil();
  15. //添加到七牛云
  16. qiniuUtil.upload(thisPath, s);
  17. System.out.println(s + ",项目文件路径:" + thisPath + ",七牛云存储路径:" + qiniuPath);
  18. File file1 = new File(thisPath);
  19. if (file1.isFile()) {
  20. //删除服务器图片
  21. file1.delete();
  22. }
  23. } catch (IOException e) {
  24. e.printStackTrace();
  25. }
  26. return qiniuPath;
  27. }

服务器添加图片的相关API

  1. @Override
  2. public String upLoadImg(MultipartFile file, String path) throws IOException {
  3. ArrayList<String> strings = new ArrayList<>();
  4. if (file.isEmpty()) {
  5. strings.add("请选择文件!");
  6. }
  7. //得到文件的类型
  8. String fileType = file.getContentType();
  9. //第一种方式Arrays.asList("image/jpeg","image/png")
  10. if (!fileType.contains("image/")) {
  11. strings.add("只允许上传图片!");
  12. }
  13. //只允许上传的图片小于5MB
  14. log.info(file.getSize());
  15. if (file.getSize() > 1024 * 1024 * 1024 * 5) {
  16. strings.add("只允许上传5M的图片!");
  17. }
  18. String fileName = "";
  19.  
  20. String[] formatName = getFormatName(file.getOriginalFilename());
  21. file.transferTo(new File(path + File.separator + formatName[0] + formatName[1] + formatName[2]));
  22. //得到图片的相对路径
  23. fileName = formatName[0] + formatName[1] + formatName[2];
  24.  
  25. if (strings.size() > 0) {
  26. fileName = "";
  27. fileName = strings.get(0);
  28. }
  29. return fileName;
  30. }
  31.  
  32. public String[] getFormatName(String fileName) {
  33. //设置日期格式yyyy-MM-dd
  34. SimpleDateFormat df = new SimpleDateFormat("_yyyyMMddHHmmss");
  35. // new Date()为获取当前系统时间
  36. String now = df.format(new Date());
  37. //获得文件名去掉后缀
  38. String prefix = fileName.substring(0, fileName.lastIndexOf("."));
  39. //得到文件后缀带.
  40. String postfix = fileName.substring(fileName.lastIndexOf("."));
  41. return new String[]{prefix, now, postfix};
  42. }

结合自身需求的总结

java(SSM)上传文件到七牛云(对象存储)的更多相关文章

  1. 使用python3.7+Vue.js2.0+Django2.0.4异步前端通过api上传文件到七牛云云端存储

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_130 之前一篇文章是通过普通js+tornado来上传七牛云:使用Tornado配合七牛云存储api来异步切分上传文件,本次使用v ...

  2. SpringSpringBoot上传文件到七牛云

    准备工作 maven pom.xml添加七牛云的sdk依赖 <dependency> <groupId>com.qiniu</groupId> <artifa ...

  3. 利用ThinkPHP自带的七牛云驱动上传文件到七牛云以及删除七牛云文件方法

    一.准备工作 1.注册七牛云账号 2.选择对象储存->创建空间->设置为公开 3.在config配置文件中添加以下代码 'UPLOAD_FILE_QINIU' => array ( ...

  4. RN 上传文件到以及上传文件到七牛云(初步)

    本文将介绍: 如何使用原生 Javascript 上传文件 如何使用七牛云 SDK 上传文件到七牛云 在 App 中文件上传是一个非常重要的需求,但是翻遍 React Naitve 的官方文档没有发现 ...

  5. 使用Qiniu-JavaScript-SDK上传文件至七牛云存储

    一.Qiniu-JavaScript-SDK介绍 基于 JS-SDK 可以方便的从浏览器端上传文件至七牛云存储,并对上传成功后的图片进行丰富的数据处理操作. JS-SDK 兼容支持 H5 File A ...

  6. Laravel-admin 七牛云上传文件到七牛云出现卡顿失败情况

    由于所做项目需要管理后台众多,所以选择了Laravel-admin后台框架进行开发.节省了权限控制以及页面处理等问题的时间 Laravel-admin文档地址 http://laravel-admin ...

  7. c++使用http协议上传文件到七牛云服务器

    使用c++ http协议上传文件到七牛服务器时,比较搞的一点就是header的设置: "Content-Type:multipart/form-data;boundary=xxx" ...

  8. laravel上传文件到七牛云存储

    背景 最近在用PHP和laravel框架做一个图片网站,需要将图片存贮到云端,搜索下了对比了下功能,发现七牛云存储不错(主要小流量免费),便选择使用七牛作为图片存储空间. 要实现的功能很简单,选择本地 ...

  9. 记一次上传文件到七牛云存储的经历(Plupload & UEditor)(.net)

    七牛 配置ACCESS_KEY和SECRET_KEY Qiniu.Conf.Config.ACCESS_KEY = "ACCESS_KEY"; Qiniu.Conf.Config. ...

随机推荐

  1. DNSMASQ 部分选项 设置

    --local-service 仅接受地址位于本地子网上的主机(即服务器上存在接口的子网)的DNS查询.仅当没有--interface,-- except-interface,--listen-add ...

  2. 如何在SpringBoot的 过滤器之中注入Bean对象

    我建立一个全局拦截器,此拦截器主要用于拦截APP用户登录和请求API时候,必须加密,我把它命名为SecurityFilter,它继承了Filter,web应用启动的顺序是:listener->f ...

  3. JDBC下

    存储过程名字前面一定要加一个sp,代表是存储过程 nofilter:没有过滤器,没有参数 )) BEGIN IF sp_name IS NULL OR sp_name='' THEN SELECT * ...

  4. Luogu P4336 [SHOI2016]黑暗前的幻想乡 矩阵树定理+容斥原理

    真是菜到爆炸....容斥写反(反正第一次写qwq) 题意:$n-1$个公司,每个公司可以连一些边,求每个边让不同公司连的生成树方案数. 矩阵树定理+容斥原理(注意到$n$不是很大) 枚举公司参与与否的 ...

  5. Mac出现程序闪退的解决方案

    重置PRAM 1. 关机 2.按下电源键后,立即按下command + option + P +R 3.等到电脑出现4次重启的声音后,放开按键,重置成功 4.正常使用

  6. 防止sql注入的参数化查询

    参数化查询为什么能够防止SQL注入 http://netsecurity.51cto.com/art/201301/377209.htm OleDbDataAdapter Class http://m ...

  7. 小米 oj 硬币比赛(思维+动态规划)

     硬币比赛 序号:#47难度:困难时间限制:1000ms内存限制:10M 描述 有 n 个不同价值的硬币排成一条线.有 A 与 B 两个玩家,指定由 A 开始轮流(A 先手,然后 B,然后再 A..) ...

  8. 【luoguP1196】 [NOI2002]银河英雄传说--边带权并查集 ,

    题目描述 公元五八○一年,地球居民迁至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山压顶 ...

  9. 数据结构实验之链表六:有序链表的建立(SDUT 2121)

    #include <bits/stdc++.h> using namespace std; struct node { int data; struct node *next; }; in ...

  10. Windows 10 共享需要网络凭据的问题

    如果Windows在资源管理器的网络中双击其他的网络设备,提示要输入网络凭据的解决办法: 打开"网络共享中心" -> "更改高级共享设置"->&qu ...