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

七牛云 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

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-upload
    action="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){},

四、结果

在这里插入图片描述

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
Vue 中使用七牛云进行图片上传,需要先在七牛云申请一个空间并获取 Access Key 和 Secret Key,然后安装相关的依赖库。 1. 安装依赖库: ``` npm install qiniu-js vue-qiniu-upload --save ``` 2. 在 Vue 中引入依赖: ``` import QiniuUpload from 'vue-qiniu-upload' import * as qiniu from 'qiniu-js' ``` 3. 在 Vue 组件中使用: ``` <template> <div> <qiniu-upload :domain="domain" :access-key="accessKey" :secret-key="secretKey" :path="path" :size="size" :accept="accept" :before="beforeUpload" :complete="uploadComplete" :error="uploadError" > <button>上传图片</button> </qiniu-upload> </div> </template> <script> export default { components: { QiniuUpload }, data () { return { domain: 'your-qiniu-domain', accessKey: 'your-access-key', secretKey: 'your-secret-key', path: '/upload', size: 10 * 1024 * 1024, accept: 'image/*' } }, methods: { beforeUpload (file) { // 可以在这里进行一些上传前的操作,比如图片压缩等 }, uploadComplete (res) { // 上传完成后的回调 console.log('上传完成', res) }, uploadError (err) { // 上传失败的回调 console.log('上传失败', err) } } } </script> ``` 以上代码中,`QiniuUpload` 组件是我们刚才引入的依赖库中提供的,通过传入相关参数就可以进行图片上传了。在 `beforeUpload` 方法中可以对图片进行一些处理,比如压缩等操作。`uploadComplete` 和 `uploadError` 分别是上传成功和上传失败后的回调函数,可以进行一些相关的操作。 注意,上传图片之前需要在七牛云中进行配置,具体可以参考七牛云的文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十月ooOO

许个愿,我帮你实现

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值