微信小程序存放视频文件到阿里云用到算法js脚本文件

时间:2023-03-09 04:33:16
微信小程序存放视频文件到阿里云用到算法js脚本文件
peterhuang007/weixinFileToaliyun: 微信小程序存放视频文件到阿里云用到算法js脚本文件 https://github.com/peterhuang007/weixinFileToaliyun
require('./crypto/hmac.js');
require('./crypto/sha1.js');
const env = require('./config.js');
const Base64 = require('./Base64.js');
const Crypto = require('./crypto/crypto.js');
// const uploadFile = function (filePath, fileW, objectId, successCB, errorCB) {
const uploadFile = function(aliyunLogicDir, filePath, successCB, errorCB) {
// const uploadFile = function (aliyunLogicDir,filePath) {
console.log(filePath)
if (!filePath || filePath.length < 9) {
wx.showModal({
title: '视频错误',
content: '请重试',
showCancel: false,
})
return;
}
console.log('上传视频…');
//const aliyunFileKey = fileW+filePath.replace('wxfile://', ''); const aliyunFileKey = aliyunLogicDir + filePath.split("/")[filePath.split("/").length - 1];
console.log(aliyunFileKey);
const aliyunServerURL = env.aliyunServerURL;
const OSSAccessKeyId = env.OSSAccessKeyId;
const policyBase64 = getPolicyBase64();
const signature = getSignature(policyBase64);
console.log('aliyunFileKey=', aliyunFileKey);
wx.uploadFile({
url: aliyunServerURL, //仅为示例,非真实的接口地址
filePath: filePath,
name: 'file',
formData: {
'key': aliyunFileKey,
'OSSAccessKeyId': OSSAccessKeyId,
'policy': policyBase64,
'Signature': signature,
'success_action_status': '200',
},
success: function(res) {
console.log(res)
if (res.statusCode != 200) {
errorCB(new Error('上传错误:' + JSON.stringify(res)))
return;
}
console.log('上传视频成功', res)
successCB(aliyunFileKey);
},
fail: function(err) {
console.log(err) err.wxaddinfo = aliyunServerURL;
errorCB(err);
},
})
} const getPolicyBase64 = function() {
let date = new Date();
date.setHours(date.getHours() + env.timeout);
let srcT = date.toISOString();
const policyText = {
"expiration": srcT, //设置该Policy的失效时间,超过这个失效时间之后,就没有办法通过这个policy上传文件了 指定了Post请求必须发生在2020年01月01日12点之前("2020-01-01T12:00:00.000Z")。
"conditions": [
["content-length-range", 0, 20 * 1024 * 1024] // 设置上传文件的大小限制,1048576000=1000mb
]
}; const policyBase64 = Base64.encode(JSON.stringify(policyText));
return policyBase64;
} const getSignature = function(policyBase64) {
const accesskey = env.AccessKeySecret; const bytes = Crypto.HMAC(Crypto.SHA1, policyBase64, accesskey, {
asBytes: true
});
const signature = Crypto.util.bytesToBase64(bytes); return signature;
} module.exports = uploadFile;
const uploadImage = require('../../utils/uploadAliyun.js');
var gd = getApp().globalData;
var imgUrlApp = gd.imgUrlApp;
var localImgPath = gd.localImgPath;
var apiUrlApp = gd.apiUrlApp;
var searchInput = "";
Page({
data: {
apiUrlApp: apiUrlApp,
imgUrlApp: imgUrlApp,
localImgPath: localImgPath,
navbar: ['tab0', 'tab1', 'tab2'],
currentTab: 0,
},
//响应点击导航栏
navbarTap: function (e) {
var idx = e.currentTarget.dataset.idx
this.setData({
currentTab: idx,
TypeItem: this.data.navbar[this.data.currentTab],
})
switch (idx) {
case 0:
this.pubBK();
break;
case 1:
this.myBKItemList();
break;
case 2:
default:
this.myBKDetailList();
break;
}
}, upLoad: function (e) {
wx.chooseVideo({
success: function (res) {
console.log(res)
var tempFilePath = res.tempFilePath
console.log(tempFilePath)
uploadImage("logicDir/video/" + wx.getStorageSync("username") + "/", tempFilePath, function () {
console.log('ok')
}, function () {
console.log('NOTok')
})
}
});
},
onLoad: function (options) { }, /**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
var that = this;
wx.getSystemInfo({
success: function (res) {
that.setData({
//动态根据手机分辨率来计算内容的高度(屏幕总高度-顶部筛选栏的高度)
contentHeight: (res.windowHeight - 72 * res.screenWidth / 750)
});
}
})
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () { }, /**
* 生命周期函数--监听页面隐藏
*/
onHide: function () { }, /**
* 生命周期函数--监听页面卸载
*/
onUnload: function () { }, /**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () { }, /**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () { }, /**
* 用户点击右上角分享
*/
onShareAppMessage: function () { }, onShow: function () {
// 页面显示
},
onHide: function () {
// 页面隐藏
},
onUnload: function () {
// 页面关闭
}, })

  

微信小程序存放视频文件到阿里云用到算法js脚本文件
<view>
<image bindtap="upLoad" mode="aspectFit" src="{{localImgPath}}icon-plus-16.svg"></image>
</view>