七牛云 vue 图片上传简单解说,js 上传文件图片

一、七牛云简介

首次使用七牛云存储进行项目的图片存储,整了一上午才整明白,这些官方的教程把明白人也给说糊涂了,文档很不规范。

七牛云有免费的使用额度,https://www.qiniu.com/prices/kodo
上传是不算流量的,只有资源被访问的时候才产生流量,很合理。
对于个人小项目使用来说,很方便,文件系统本身就应该跟业务系统分离。

二、web 上传需要什么

七牛云的使用分为 【前端使用】 和【后台使用】。

  • 前端:就是 web 前端直接上传文件到七牛云服务器。
  • 后台:就是后台直接跟七牛云服务器交互,进行文件上传。

这里有个问题需要注意,前端直接上传是不走我们自己的后台服务器流量的;而如果前端先将文件交给后台,后台再上传到七牛云,那就是要走后台服务器的流量的,这个后台开发者会知道的。

web 前端直接上传文件到 七牛云 服务器只需要从后台那里获取一个东西:

  • 上传用的 token

这个 token 是后台给的:
后台通过七牛云账号的 AccessKey + SecretKey + 要上传到的 bucket(要上传到的对象空间)向七牛云服务器获取对应的 token 返还给前端。
这部分不需要前端做,是后台做的,如果你不了解后台,只是看看就行。比如用 nodejs 实现的后台方法为:

const bucket = '存储对象空间名';
function getQiniuToken(){let mac = new qiniu.auth.digest.Mac(configProject.qiniuAccessKey, configProject.qiniuSecretKey);const options = {scope: bucket};let putPolicy = new qiniu.rs.PutPolicy(options);return putPolicy.uploadToken(mac)
}

三、实现上传

web 上传文件到七牛云服务器很简单,官方已经有对应的 SDK 可供使用。你都不需要知道它是怎么实现的,只是用就可以。

这是官方 JS SDK 文档,写的真TM 一般,自己写的可能挺明白,别人就知道什么意思 https://developer.qiniu.com/kodo/1283/javascript

以 vue 项目为例

1. 添加 七牛云 工具组件 qiniu-js

所有的工具方法都在这个组件里

npm i qiniu-js

在你需要上传文件的页面中引入它,这里需要注意,这玩意的引入方式跟 echart 一样,不是普通的直接引,而是用 import * as qiniu 这种方式,我就卡在这了。

// 这种是错误的!!!
import qiniu from 'qiniu-js'// 这才是对的!
import * as qiniu from 'qiniu-js'

2. 上传图片的格式

主要是用 qiniu.upload()方法

它的参数有:

  • file: 文件本体
  • key: 用文件名就行
  • token: 就是上面说到的后台从七牛云获取到的 token
  • putExtra: 看官方文档,我也用不到 https://developer.qiniu.com/kodo/1283/javascript
  • config: 看官方文档,我也用不到 https://developer.qiniu.com/kodo/1283/javascript

简单吧,主要参数就三个: file, key, token

const observer = {next(res){// 上传成功后console.log('next: ',res)},error(err){// 失败console.log(err)},complete(res){console.log('complete: ',res)}
}
// 1. 通过 .upload 方法获取到 observable 对象
const observable = qiniu.upload(uploadInfo.file, uploadInfo.file.name, res.data, {}, {})
// 2. observable.subscribe 触发上传,之后的回调方法都在 observer 对象中,对应着:成功、失败、完成方法
const subscription = observable.subscribe(observer) // 上传开始// 3. 当然你也可以取消上传操作
// subscription.unsubscribe() // 上传取消

这样应该很明白了吧。

2. 跟 element-ui 配合实现图片上传

<el-upload> 中的 http-request 是覆盖默认上传方式的方法,所以我们用它

接收的参数是这个 el-upload 对象本身,它的参数有:

看到了没有,那个 file 就是我们需要的东西。

然后完整的代码就是:

<el-uploadaction="files.kylebing.cn"list-type="picture-card":on-preview="handlePictureCardPreview":http-request="uploadFile":on-remove="handleRemove"><i class="el-icon-plus"></i>
</el-upload>
// 上传方法
uploadFile(uploadInfo){console.log(uploadInfo)fileApi.getUploadToken().then(res => {console.log('success')console.log(res.data)// 上传文件const observer = {next(res){console.log('next: ',res)},error(err){console.log(err)},complete(res){console.log('complete: ',res)}}const observable = qiniu.upload(uploadInfo.file, uploadInfo.file.name, res.data, {}, {})const subscription = observable.subscribe(observer) // 上传开始// subscription.unsubscribe() // 上传取消}).catch(err => {this.$message.error('获取上传 token 失败')})},
// 图片删除
handleRemove(file, fileList) {console.log(file, fileList);
},// 图片点击预览
handlePictureCardPreview(file){},

四、结果

七牛云 vue 图片上传简单解说,js 上传文件图片相关推荐

  1. html表单调用js文件上传,简单实现js上传文件功能

    本文实例为大家分享了js实现上传文件功能的具体代码,供大家参考,具体内容如下 一.用input完成上传,效果图如 选择文件后,提交后出现图片url 二.传输格式采用form-data形式. html代 ...

  2. ThinkPHP6使用七牛云存储,不改代码,改下配置就上七牛

    ThinkPHP6使用七牛云存储,不改代码,改下配置就上七牛 介绍 ThinkPHP6中使用flysystem作为文件处理类,flysystem是一个php文件处理库,可以使用相同的接口连接本地,ft ...

  3. 手把手教你配置linux下C++开发工具——vim+ycm(YouCompleteMe),支持基于语义的自动补全和第三方库补全(史上最简单、史上最透彻、史上最全的终极解决方案)

    截止到目前,vim稳定版本已经到了8.2+,ycm(YouCompleteMe的简称)最新版本与几年前的安装配置截然不同了.之前网上很多教程也教不得法,生搬硬套,没有讲透彻.所以,才下定决心写一篇自认 ...

  4. tp6腾讯云、七牛云对象存储的工具类以及异步上传

    composer安装 composer require lorine/oss-utils 代码: use Lorine\OssUtils\OssService;$config = ['ak' => ...

  5. php单文件上传实例,php封装的单文件(图片)上传类完整实例

    本文实例讲述了php封装的单文件(图片)上传类.分享给大家供大家参考,具体如下: //封装php中的单文件(图片)上传类 /* //参数1:$file 文件数组 5个属性值 name,type,siz ...

  6. Android之——史上最简单最酷炫的3D图片浏览效果的实现

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/48052709 如今,Android开发已经成为移动互联开发领域中一支不可或缺的力量 ...

  7. js文件夹上传到服务器,js 上传img到服务器

    jQuery插件之ajaxFileUpload 前端视图,HTML与JS代码,成功上传后,返回图片真实地址并绑定到的SRC地址lt;head>lt;script src="/jquer ...

  8. python节日贺卡图片大全_简单漂亮三年级新年贺卡图片大全

    春节是中国最隆重的传统节日,它象征着团结.兴旺,是对未来寄托新的希望的佳节.下面小编给大家分享一些简单漂亮三年级新年贺卡图片,大家快来跟小编一起欣赏吧. 简单漂亮三年级新年贺卡图片展示 简单漂亮三年级 ...

  9. html表格中绑定显示xml文档内容的简单实例,JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)...

    本文实例讲述了JS读取XML文件数据并以table形式显示数据的方法.分享给大家供大家参考,具体如下: 先看xml文件: 张秋丽 女 18 李文才 男 31 李斯文 男 22 马英 女 25 孙红雷 ...

最新文章

  1. windows10下使用virtualenv虚拟技术,管理多个python版本,多个项目包环境
  2. mysql启动失败的一个解决方法
  3. sql时间转换时分秒_SQL数据库中的是年月日时分秒格式的,什么语句能实现年月日的查询?...
  4. .NET Core:面向未来的开源跨平台开发技术
  5. 【洛谷P1833】樱花
  6. RTSP、RTMP、HTTP协议区别
  7. java中isolate时间_Java HikariDataSource.setIdleTimeout方法代码示例
  8. CSS基础「五」定位
  9. 公务员计算机软件及相关专业,公务员计算机专业考试大纲和真题3
  10. 使用ByteArrayOutputStream解决IO乱码问题的踩坑记录
  11. 玩归玩,闹归闹,别拿抽奖开玩笑
  12. 伸缩式起重机的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  13. openssl生成RSA格式及pkcs1与pkcs8格式互相转换
  14. 使用Python爬取中国天气网天气数据
  15. 如何自出版一本书:一份资源清单
  16. 蓝桥杯嵌入式LCD液晶屏显示
  17. 一种快速的幂运算方法(底数是自然数e,指数是浮点数)
  18. python 全栈开发,Day136(爬虫系列之第3章-Selenium模块)
  19. HitPaw Photo Enhancer v1.0.1 照片清晰放大
  20. 安装flashplay的debug版本调试flex

热门文章

  1. iOS之TabbarController和NavigationController框架
  2. r ridge回归_手把手带你画高大上的lasso回归模型图
  3. 高数量类别特征(high-cardinality categorical attributes)的预处理方法
  4. 【分治】大整数乘法(C++)
  5. C++ 双指针汇总(快慢指针, 滑动窗口, 前后指针,左右指针)
  6. python中占位符的使用
  7. 如何搭建简易又安全的企业内部文件服务器?
  8. Qt编写数据可视化大屏界面电子看板10-改造QCustomPlot
  9. BLE 蓝牙抓包分析
  10. 消防设施操作员考试真题、模拟练习题库(8)