七牛云 上传图片到七牛云并返回图片URL

鸣谢'追逐盛夏流年':https://blog.csdn.net/j1231230/article/details/80061834

在开发项目的时候,经常会用到上传图片的功能,如果把图片全都存放在项目路径下,会导致项目越来越臃肿,因此可以考虑把图片上传交给第三方处理,此处我们采用七牛云进行图片存储。

一.七牛云准备工作

1.七牛云注册登录

https://portal.qiniu.com/signup/choice

2.新建存储空间

进入对象存储菜单,点击“新建存储空间”,这里需要实名认证,上传身份证正反面之类的,大概一个小时左右就认证成功了,效率真是棒棒哒~

这里的存储空间名称要记住,之后在代码里面会用到。

二.代码实现

1.在pom.xml添加七牛云依赖

我的项目使用了maven管理jar包,所以只需直接添加相应依赖即可:

<dependency><groupId>com.qiniu</groupId><artifactId>qiniu-java-sdk</artifactId><version>7.1.1</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

2.添加七牛云图片操作工具类

package com.cn.netdisk.util;import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.BucketManager;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
import com.qiniu.util.Base64;
import com.qiniu.util.StringMap;
import com.qiniu.util.UrlSafeBase64;import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;public classQiniuCloudUtil{// 设置需要操作的账号的AK和SKprivate static final String ACCESS_KEY = "你的ACCESS_KEY";private static final String SECRET_KEY = "你的SECRET_KEY";// 要上传的空间private static final String bucketname = "你的空间名称";// 密钥private static final Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);private static final String DOMAIN = "你的图片上传路径";private static final String style = "自定义的图片样式";public String getUpToken() {        return auth.uploadToken(bucketname, null, 3600, new StringMap().put("insertOnly", 1));}// 普通上传public String upload(String filePath, String fileName) throws IOException {// 创建上传对象UploadManager uploadManager = new UploadManager();try {// 调用put方法上传String token = auth.uploadToken(bucketname);if(UtilValidate.isEmpty(token)) {System.out.println("未获取到token,请重试!");return null;}Response res = uploadManager.put(filePath, fileName, token);// 打印返回的信息System.out.println(res.bodyString());if (res.isOK()) {Ret ret = res.jsonToObject(Ret.class);//如果不需要对图片进行样式处理,则使用以下方式即可//return DOMAIN + ret.key;return DOMAIN + ret.key + "?" + style;}} catch (QiniuException e) {Response r = e.response;// 请求失败时打印的异常的信息System.out.println(r.toString());try {// 响应的文本信息System.out.println(r.bodyString());} catch (QiniuException e1) {// ignore}}return null;}//base64方式上传public String put64image(byte[] base64, String key) throws Exception{String file64 = Base64.encodeToString(base64, 0);Integer l = base64.length;String url = "http://upload.qiniu.com/putb64/" + l + "/key/"+ UrlSafeBase64.encodeToString(key);      //非华东空间需要根据注意事项 1 修改上传域名RequestBody rb = RequestBody.create(null, file64);Request request = new Request.Builder().url(url).addHeader("Content-Type", "application/octet-stream").addHeader("Authorization", "UpToken " + getUpToken()).post(rb).build();//System.out.println(request.headers());OkHttpClient client = new OkHttpClient();okhttp3.Response response = client.newCall(request).execute();System.out.println(response);//如果不需要添加图片样式,使用以下方式//return DOMAIN + key;return DOMAIN + key + "?" + style;}// 普通删除(暂未使用以下方法,未测试)public void delete(String key) throws IOException {// 实例化一个BucketManager对象BucketManager bucketManager = new BucketManager(auth);// 此处的33是去掉:http://ongsua0j7.bkt.clouddn.com/,剩下的key就是图片在七牛云的名称key = key.substring(33);try {// 调用delete方法移动文件bucketManager.delete(bucketname, key);} catch (QiniuException e) {// 捕获异常信息Response r = e.response;System.out.println(r.toString());}}class Ret {public long fsize;public String key;public String hash;public int width;public int height;}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121

(1).获取需要操作的账号的AK和SK

private static final String ACCESS_KEY = "你的ACCESS_KEY";
private static final String SECRET_KEY = "你的SECRET_KEY";
  • 1
  • 2

进入个人中心-密钥管理

(2).获取要上传的空间

private static final String bucketname = "你的空间名称";
  • 1

(3).获取图片上传URL路径

private static final String DOMAIN = "你的图片上传路径";
  • 1


(4).获取自定义的图片样式

private static final String style = "自定义的图片样式";
  • 1

我这里是需要给图片添加水印,所以自定义了图片样式,如果对于上传图片没有格式要求,则可以跳过此步骤。

将imagestyle的处理接口作为style的值即可。

3.后端代码调用

@ResponseBody@RequestMapping(value="/uploadImg", method=RequestMethod.POST)public ResultInfo uploadImg(@RequestParam MultipartFile image, HttpServletRequest request) {ResultInfo result = new ResultInfo();if (image.isEmpty()) {result.setCode(400);result.setMsg("文件为空,请重新上传");return result;}try {byte[] bytes = image.getBytes();String imageName = UUID.randomUUID().toString();QiniuCloudUtil qiniuUtil = new QiniuCloudUtil();try {//使用base64方式上传到七牛云String url = qiniuUtil.put64image(bytes, imageName);result.setCode(200);result.setMsg("文件上传成功");result.setInfo(url);} catch (Exception e) {e.printStackTrace();}return result;} catch (IOException e) {result.setCode(500);result.setMsg("文件上传发生异常!");return result;}}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

4.前端代码调用

我使用的是vue,这里是使用了quillEditor富文本编辑器组件进行图片上传,uploadImg是上传图片调用的方法:

uploadImg: async function(id){  var vm = this;var fileInput = document.getElementById("uniqueId");  var formData = new FormData();formData.append("image", fileInput.files[0]);this.$axios({method: "post",url: '/api/article/uploadImg',data: formData}).then((response) = >{if (response.data.code == 200) {//后端返回的url地址var url = response.data.info;if (url != null && url.length > 0) {   vm.addImgRange = vm.$refs.myQuillEditor.quill.getSelection();var index = vm.addImgRange != null ? vm.addImgRange.index: 0;   vm.$refs.myQuillEditor.quill.insertEmbed(index, 'image', url);  } else {this.$Message.error("图片添加失败!");  }} else {this.$Message.error(response.data.msg);}});
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

七牛云 上传图片到七牛云并返回图片URL相关推荐

  1. 七牛云上传图片并返回图片URL

    1.七牛云注册登录 https://portal.qiniu.com/signup/choice 完成实名认证,传身份证正反面之等,大概一个小时左右就认证成功了 2.新建存储空间 地区可以自己选择 3 ...

  2. 上传图片到七牛云并返回图片URL

    在开发项目的时候,经常会用到上传图片的功能,如果把图片全都存放在项目路径下,会导致项目越来越臃肿,因此可以考虑把图片上传交给第三方处理,此处我们采用七牛云进行图片存储. 一.七牛云准备工作 1.七牛云 ...

  3. 二维码生成并上传至七牛云 返回图片URL

    背景:最近一个项目的优惠券模块,需要将优惠券的券号转换成二维码展示出来,并保证能够被扫码枪识别. 接着,简要说明下编码思路,或者说步骤: 引入 qrcode 的Jar依赖 调用API,合理配置相关属性 ...

  4. php上传图片到远程服务器并返回图片地址到本地显示

    本示例将演示一个简单的上传图片到远程服务器,然后生成图片路径后通过提交的回调路径返回给本地服务器,最后将图片地址显示在前端页面. 本项目应用三个文件,即前端选取图片的页面,然后提交图片到远程服务器处理 ...

  5. Java接收并上传图片至S3,返回图片URL,并删除本地图片

    Java将图片上传至S3,一般前端页面上传过来的图片,在后端接收形式都为MultipartFile,而S3不支持MultipartFile形式的文件,只支持File类型,所以需要先转换类型再上传.注意 ...

  6. java后端上传图片到项目相对地址并返回图片路径

    java // POST /sms/system/headerImgUpload@ApiOperation("文件上传统一入口")@PostMapping("/imgUp ...

  7. 小程序上传图片到七牛云(支持多张上传,预览,删除)

    以下为wxml (使用的vant小程序ui框架,需在json文件里自行引入) <view class='clearFloat'><view class='upload_title'& ...

  8. 根据后台返回地址实现图片展示_微信小程序 - 前端接入七牛云上传图片和视频...

    相信小程序开发者在开发过程中都会遇到上传代码包遇到大小限制这个问题,因为微信现在规定代码不能超过 2 MB 大小,但我们实际开发过程中难免会有业务需求要使用一些图片和视频等媒体文件,这样的话会导致上传 ...

  9. python 上传图片到七牛云上

    后端,生成token # 自己的密钥 assess_key = 'lJmRta45LtmYLB****************HHb_0M4TR-' secret_key = 'OqrHGUXASeW ...

最新文章

  1. 产品分析报告|读书新贵——《网易蜗牛读书》
  2. SQL语言之事务处理语言(Oracle)
  3. python 中numpy dot函数的使用方法
  4. BZOJ.2707.[SDOI2012]走迷宫(期望 Tarjan 高斯消元)
  5. vs怎么建java的控制台程序_像VS一样简单的打包“控制台”程序
  6. 点对点信道互连以太网实验_以太网防雷器通讯参数测试(二)——防雷器对高速链路影响的参数...
  7. java.lang包—类加载器ClassLoader类
  8. 数组的初始化与默认值
  9. C语言课后习题(36)
  10. 计算机主机箱的拆卸步骤,一种方便拆卸的计算机主机箱的制作方法
  11. 【美团外卖】美食知识图谱的迭代及应用
  12. Wireless Communications - 2.4 Ray Tracing
  13. 【游戏运营】【推荐阅读】
  14. 解决steam饥荒联机版(DST Dont Starve Together)启动时error during initialization的方法
  15. 在Android中调用浏览器打开网页方式
  16. 使用FFMPEG将WebM转为MP4或MKV
  17. 前端大屏展示框架搭建(二)
  18. 怎么搭建可视化BI数据平台(下)
  19. mt4怎么样修改服务器,mt4怎样修改服务器地址
  20. 台式计算机wifi老掉线,电脑总掉线是什么原因_电脑总掉线wifi正常

热门文章

  1. 丹尼带你入坑无人机3 - 四轴配件简介
  2. DATA GUARD的概念及作用
  3. 电脑桌面点任何文件都打开计算机,电脑打开文件夹总是新窗口打开如何解决?...
  4. 三亚香格里拉一年一度海岛冬令营回归;三亚美高梅度假酒店将举办十周年庆典 | 全球旅报...
  5. 开始连载PBOC相关文章了
  6. 纯python+tk开发股票证券软件
  7. 计算机二级Python学习笔记(七)
  8. 阿里云ECS服务器部署javaweb项目整个流程
  9. 超静定桁架的有限元建模与分析--ansys
  10. 文件批量改名:如何将在不同文件夹里的文件统一命名并设置编号?