前端通过ajax上传文件到七牛云

1. 从服务端获取七牛云上传的token,生成token参考官方文档https://developer.qiniu.com/kodo/1208/upload-token

2. 在七牛云文档查找上传的存储区域 https://developer.qiniu.com/kodo/1671/region-endpoint-fq

    在七牛云控制台找到空间管理的cdn加速域名https://portal.qiniu.com/kodo/bucket/overview?bucketName=yourBucketName

在七牛的管理控制台可以看到所属存储区域 和 域名(下面的上传代码会用到这个域名)

3.使用axios上传文件,cdn加速域名+上传成功返回的key就是图片的url地址

          let fd= new FormData()
          fd.append('file', file, file.name );//file是文件对象
          fd.append('token', token ); //从后端获取到的token       
          let ajax = axios.create({withCredentials: false});
          ajax({
            url: 'https://upload.qiniup.com',
            data: fd,
            method: 'POST',
            onUploadProgress: (progress)=> {
              //这里可以做进度条
            },
          }).then((res)=>{
            console.log(res)
            let url  = 'https://qiniu.hzbswydcm.com/' + res.data.key //https://qiniu.hzbswydcm.com/  这个是上图二的地址
            
          }).catch((res)=>{
            console.log(res)     
          })

附:原生js上传文件到七牛云


            var xhr = new XMLHttpRequest();
            xhr.open('POST', 'https://upload.qiniup.com', true);
            var formData = new FormData();
            formData.append('token', token);
            formData.append('file', file);
            xhr.upload.addEventListener("progress", function(e) {
                //做进度条
            }, false);
 
            xhr.onreadystatechange = function(response) {
                if (xhr.readyState == 4 && xhr.status == 200 && xhr.responseText != "") {
                    var res = JSON.parse(xhr.responseText);
                    var url = "https://qiniu.hzbswydcm.com/"+res.key
                } else if (xhr.status != 200 && xhr.responseText) {
                    //上传出错
                }
            };
            xhr.send(formData);

附:jquery的ajax上传文件到七牛云

          let fd= new FormData()
          fd.append('file', file, file.name );//file是文件对象
          fd.append('token', token ); //从后端获取到的token             
          $.ajax({
            url:"https://upload.qiniup.com",
            type:'POST',
            data:fd,
            cache: false, //需要这个配置
            contentType: false, //需要这个配置
            processData: false, //需要这个配置
            success:function(res){
              console.log(res)
              let url  = 'https://qiniu.hzbswydcm.com/' + res.key
              
            },
            error:function(){
              console.log('数据有误')
                 
            }
          });

附: uniapp上传文件到七牛云,和上面基本一致; 微信小程序上传文件到七牛云和这个一样的

                    uni.uploadFile({
							url: 'https://upload.qiniup.com',
							filePath: file,
							name: 'file',
							formData: {
								'token': token //上传的token,从服务端获取
							},
							success: (res) => {
								let ures = JSON.parse(res.data)
								let url  = 'https://qiniu.hzbswydcm.com/' + ures.key
								
							}
						});

使用七牛SDK包(qiniu-js)上传

(前端在开发APP时不可用,会报错XMLHttpRequest是undefined)

1.先安装依赖

npm i qiniu-js

2.导入qiniu-js

import * as qiniu from 'qiniu-js'
// var qiniu = require('qiniu-js') //两种方式都可以

3.使用上传

        let imgtype = ''
		if (file && file.name && file.name != undefined) {
			imgtype = '.' + file.name.split('.')[1]
		} else {
			imgtype = '.' + file.type.split('/')[1]
		}
		const key = Date.now() + "_" + file.size + imgtype; // 上传后文件资源名以设置的 key 为主,如果 key 为 null 或者 undefined,则文件资源名会以 hash 值作为资源名。
		let config = {
			useCdnDomain: true, //表示是否使用 cdn 加速域名,为布尔值,true 表示使用,默认为 false。
			// region: qiniu.region.z0    // 根据具体提示修改上传地区,当为 null 或 undefined 时,自动分析上传域名区域
		};

		let putExtra = {};
		let observable = qiniu.upload(file, key, token, putExtra, config);//上传token从服务端获取
		observable.subscribe({ //内部使用的是XMLHttpRequest上传,在APP端是undefined,不支持APP
			next: (res) => {
				// 主要用来展示进度
				let total = res.total;
				console.log("进度:" + parseInt(total.percent) + "% ")
			},
			error: (err) => {
				// 失败报错信息
				console.log(err)
			},
			complete: (res) => {
				// 接收成功后返回的信息
				let url = 'http://qiniu.xxxxxxxxx.com/' + res.key //图片的url地址
				console.log(url);
			}
		})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
首先,你需要在你的 Vue 项目中安装 `qiniu-js` 包,这个包可以帮助你将文件上传七牛云。 安装命令:`npm install qiniu-js` 然后,在你的 Vue 组件中引入 `qiniu-js` 包,代码如下: ``` import * as qiniu from 'qiniu-js' ``` 接下来,我们需要实现异步上传文件七牛云的功能。假设我们已经有一个上传文件的方法 `handleUpload`,代码如下: ``` handleUpload(file) { const token = 'your-qiniu-upload-token' // 替换成你的七牛云上传凭证 const key = file.name // 文件名作为七牛云存储的文件名 const config = { useCdnDomain: true, // 是否使用七牛云的 CDN 域名 } const putExtra = { fname: file.name, // 文件原始名字 params: {}, // 上传额外参数 mimeType: null // 上传文件类型 } const observable = qiniu.upload(file, key, token, putExtra, config) const observer = { next(res) { // 上传进度回调 console.log(res.total.percent) }, error(err) { // 上传失败回调 console.log(err) }, complete(res) { // 上传成功回调 console.log(res) } } const subscription = observable.subscribe(observer) // 执行上传操作 } ``` 在上面的代码中,我们通过 `qiniu.upload` 方法来执行文件上传操作,参数依次为: - `file`: 要上传的文件对象 - `key`: 上传到七牛云后的文件名 - `token`: 七牛云上传凭证 - `putExtra`: 上传额外参数,包括文件名、上传参数和文件类型 - `config`: 上传配置,包括是否使用七牛云的 CDN 域名 在上传过程中,我们通过观察者模式来监听上传进度、上传成功和上传失败事件,并执行相应的回调函数。 最后,你可以在你的组件中调用 `handleUpload` 方法来上传文件,例如: ``` <el-upload action="" :before-upload="handleUpload" > <el-button type="primary">点击上传</el-button> </el-upload> ``` 在上面的代码中,我们使用了 Element UI 的上传组件,并将 `before-upload` 属性设置为 `handleUpload` 方法,这样就可以触发文件上传操作了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值