upload() {
let that = this;
return new Promise((resolve, reject) => {
let key = new Date().getTime() + '.mp4';
wx.showLoading({
title: '正在上传',
mask: true
});
wx.uploadFile({
url: 'https://upload-z2.qiniup.com',
filePath: that.dataURL, // 上传文件路径
header: {
'Content-Type': 'multipart/form-data'
},
name: 'file', // 上传文件名称
formData: {
token: that.token, // 上传凭证
key: key,
//我这里瞎猜的根本不生效。。。。
bucket: 'sdsd',
fops: 'avthumb/mp4/ab/160k/ar/44100/acodec/libfaac/r/30/vb/1000k/vcodec/libx264/s/1280x720/autoscale/1/stripmeta/0',
pipeline: 'gaoqing' // 指定转码管道
},
success: function(res) {
console.log(res);
wx.hideLoading();
// 上传成功,返回七牛云存储中的文件路径
resolve('dn.com/' + key,res);
},
fail: function(res) {
wx.hideLoading();
// 上传失败,返回错误信息
reject(res.errMsg);
}
});
});
},
qiniuyun() {
let that = this;
wx.cloud.callFunction({
name: 'qiniuyun',
success(res) {
that.token = res.result.token;
wx.chooseVideo({
sourceType: ['album', 'camera'],
maxDuration: 10,
camera: 'back',
success: function(res) {
that.dataURL = res.tempFilePath;
wx.showLoading({
title: '正在上传',
mask: true
});
// 调用上传函数,等待七牛云存储的返回值
that.upload()
.then(key => {
wx.hideLoading();
console.log('上传成功,文件路径为:', key);
})
.catch(errMsg => {
wx.hideLoading();
console.log('上传失败,错误信息为:', errMsg);
});
}
});
},
fail(res) {
console.log(res);
}
});
},
云函数
// 云函数入口文件
const cloud = require('wx-server-sdk')
const qiniu = require('qiniu')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境
// 云函数入口函数
exports.main = async (event, context) => {
var accessKey = '=2L';
var secretKey = 'XY';
var mac = new qiniu.auth.digest.Mac(accessKey, secretKey);
var options = {
scope: "sdsd",
expires: 7200 ,
// 指定转码管道
returnBody: '{"key": $(key), "hash": $(etag), "fsize": $(fsize), "bucket": $(bucket), "name": $(fname)}'
};
var putPolicy = new qiniu.rs.PutPolicy(options);
var uploadToken=putPolicy.uploadToken(mac);
const token = putPolicy.uploadToken(mac)
const filePath = event.filePath; // 从前端传入的视频文件路径
console.log(token);
return{
token,options
}
}
我思路就是从后端返回一个token 前端调用。。 发现如果后端指定了一个scope 的空间 前端无论如何修改buket都没什么用, 到底咋转码上传的?
以下回答引用自chatGpt, 有用的话,请采纳哇!!!
在uni-app中使用七牛云上传并转码,可以按照以下步骤进行:
需要注意的是,七牛云的持久化处理需要消耗一定的费用,使用之前需要进行费用的评估和规划。此外,七牛云官方文档中也提供了详细的操作指南,可以帮助开发者更好地使用七牛云实现文件上传和转码功能。
正常 fop参数就是用来转码的,官方文档值得吐槽,不过还是建议看一下
https://developer.qiniu.com/dora/kb/2500/streaming-media-queue-about-seven-cows
https://developer.qiniu.com/kodo/1272/form-upload