微信小程序中图片上传阿里云Oss
本人今年6月份毕业,最近刚在上海一家小公司实习,做微信小程序开发。最近工作遇到一个小问题。
微信小程序图片上传阿里云服务器Oss也折腾了蛮久才解决的,所以特意去记录一下。
第一步:配置阿里云地址:
我们公司是阿里云地址是会改变的,所以需要动态的从后台获取配置
var client = hprose.Client.create(app.globalym, ["get_oss_config"]);
client.get_oss_config(******, *****).then(function (res) {
var res = JSON.parse(res);//从后台返回的oss账号数据
if (res.code == 1) {//判断是否得到
env = {
//aliyun OSS config
uploadImageUrl: 'https://' + res.body.bucket + '.' + res.body.area + '.com', //默认存在根目录,可根据需求改
AccessKeySecret: res.body.accesskey,
OSSAccessKeyId: res.body.accessid,
timeout: 87600 //这个是上传文件时Policy的失效时间
};
}
}, function (err) {
console.log('请求oss配置失败');
console.log(err);
});
主要是这部分。这是配置内容
env = {
//aliyun OSS config
uploadImageUrl: 'https://' + res.body.bucket + '.' + res.body.area + '.com', //默认存在根目录,可根据需求改
AccessKeySecret: res.body.accesskey,
OSSAccessKeyId: res.body.accessid,
timeout: 87600 //这个是上传文件时Policy的失效时间
};
第二步:引用上传图片的模块
const uploadImage = require('../../utils/uploadAliyun.js');
uploadAliyun.js的内容
const Base64 = require('./Base64.js');
require('./hmac.js');
require('./sha1.js');
const Crypto = require('./crypto.js');
var env = null
const uploadFile = function (params) {
env = params.envs
if (!params.filePath) {
wx.showModal({
title: '图片错误',
content: '请重试',
showCancel: false,
})
return;
}
const aliyunFileKey = params.dir + params.filePath.replace('wxfile://', ''); //在手机上检测 注意
//const aliyunFileKey = params.dir + params.filePath.replace('http://', ''); //在开发者工具里检测 注意
const aliyunServerURL = env.uploadImageUrl;
const accessid = env.OSSAccessKeyId;
const policyBase64 = getPolicyBase64();
const signature = getSignature(policyBase64);
// console.log('aliyunFileKey=', aliyunFileKey);
// console.log('aliyunServerURL', aliyunServerURL);
wx.uploadFile({
url: aliyunServerURL,
filePath: params.filePath,
name: 'file',
formData: {
'key': aliyunFileKey,
'policy': policyBase64,
'OSSAccessKeyId': accessid,
'signature': signature,
'success_action_status': '200',
},
success: function (res) {
if (res.statusCode != 200) {
if(params.fail){
params.fail(res)
}
return;
}
if(params.success){
params.success(aliyunFileKey);
}
},
fail: function (err) {
err.wxaddinfo = aliyunServerURL;
if (params.fail) {
params.fail(err)
}
},
})
}
const getPolicyBase64 = function () {
let date = new Date();
date.setHours(date.getHours() + env.timeout);
let srcT = date.toISOString();
const policyText = {
"expiration": srcT, //设置该Policy的失效时间
"conditions": [
["content-length-range", 0, 5 * 1024 * 1024] // 设置上传文件的大小限制,5mb
]
};
const policyBase64 = Base64.encode(JSON.stringify(policyText));
return policyBase64;
}
const getSignature = function (policyBase64) {
const accesskey = env.AccessKeySecret;
// console.log(accesskey)
const bytes = Crypto.HMAC(Crypto.SHA1, policyBase64, accesskey, {
asBytes: true
});
const signature = Crypto.util.bytesToBase64(bytes);
return signature;
}
module.exports = uploadFile;
注意如果想在开发者工具里检测上传结果,请使用这段代码
const aliyunFileKey = params.dir + params.filePath.replace('http://', ''); //在开发者工具里检测 注意
在手机上要使用这段代码,不然要报错哦!
const aliyunFileKey = params.dir + params.filePath.replace('wxfile://', ''); //在手机上检测 注意
第三步:在需要上传图片的地方,加上这段代码。
uploadImage({
filePath: res.tempFilePaths[0],
dir: "images/",
success: function (res) {
console.log(res)
},
fail: function (res) {
console.log("上传失败")
console.log(res)
},
envs: env
})
第四步:
Base64,js,hmac.js,sha1.js,crypto.js,uploadAliyun.js源码在这里,如果觉得这面文章对你有帮助的话,可给我点个star这里,谢谢!
最后,希望这篇文章对你有所帮助,真真确确是可以在微信小程序中上传图片到阿里云的。我也当做笔记记录一下。当然感谢原文对我的帮助,不然我这个小菜鸟怎么解决这个问题呢,哈哈!
微信小程序中图片上传阿里云Oss的更多相关文章
- [转]微信小程序实现图片上传功能
本文转自:http://blog.csdn.net/feter1992/article/details/77877659 前端: 微信开发者工具 后端:.Net 服务器:阿里云 这里介绍微信小程序如何 ...
- 微信小程序实现图片上传功能
前端: 微信开发者工具 后端:.Net 服务器:阿里云 这里介绍微信小程序如何实现上传图片到自己的服务器上 前端代码 data: { productInfo: {} }, //添加Banner bin ...
- 微信小程序--实现图片上传
前端: 微信开发者工具 后端:.Net 服务器:阿里云 这里介绍微信小程序如何实现上传图片到自己的服务器上 前端代码 data: { productInfo: {} }, //添加Banner bin ...
- nodeJs实现微信小程序的图片上传
今天我来介绍一下nodejs如何实现保存微信小程序传过来的图片及其返回 首先wx.uploadFile绝大部分时候是配合wx.chooseImage一起出现的,毕竟选择好了图片,再统一上传是实现用户图 ...
- 微信小程序实现图片上传,预览,删除
wxml: <view class='imgBox'> <image class='imgList' wx:for="{{imgs}}" wx:for-item= ...
- 微信小程序 实现图片上传并展示到前端(多文件)并实现表单提交验证
链接: https://blog.csdn.net/guanj0623/article/details/121595884?spm=1001.2014.3001.5501 https://blog.c ...
- 小程序实现图片上传,预览以及图片base64位处理
最近一段时间在做小程序项目,第一期功也完工了.需要好好总结一下经验,把项目中遇到的问题好好总结一下,遇到的问题,踩过的坑.今天写一个小程序实现图片上传,预览,以及删除,图片base64位处理.下面就是 ...
- 微信小程序存放视频文件到阿里云用到算法js脚本文件
peterhuang007/weixinFileToaliyun: 微信小程序存放视频文件到阿里云用到算法js脚本文件 https://github.com/peterhuang007/ ...
- base64格式的图片上传阿里云
base64格式的图片上传阿里云 上传图片的时候,除了普通的图片上传,还有一张图片信息是以base64格式发送到后台的. 后台接受base64格式的图片,上传至阿里云代码:(主要是将base64转化成 ...
随机推荐
- python,winreg,获取当前系统的桌面绝对路径
import winreg import os def main(): new_path = os.path.join(desktop_path(), 'aaa.xlsx') # 结果为:C:\\Us ...
- JS代码,从一个数组中得到连号的数并显示
JavaScript code function m() { var k = [1, 2, 7, 8, 9, 11, 22, 35, 36]; ) return; ; ; ; ; i < k.l ...
- postman接口测试使用
在做测试之前,先要了解一下http相关的一些知识,这样做起来才会更加顺手. http的请求分为header 和 body,一般在header里面放一些其他的信息,比如cookie,浏览器信息 body ...
- CSS预处理技术
CSS自定义变量 这是一个实验中的标准,后续的具体写法和解析可能会有变动. 与Less|Sass等预处理器不同的是CSS变量带有语义效果,并且不需要额外的编译.因为其名称本身就包含了语义的信息,这使得 ...
- 吴裕雄--python学习笔记:os模块函数
os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'. os.getcwd:得 ...
- axios 传对象(JavaBean)到后台
//user对象 let user = JSON.stringify({ userAccountNumber: own.userName, userPassword: own.userPassword ...
- mvn -v报java.lang.ClassNotFoundException
Tips: 比如要下载版本3.2.5的,请选择binaries下的apache-maven-3.2.5-bin.zip. binaries 指的是可以执行的. source 指的源码. 下载地址:ht ...
- 选拔赛 hash 字符串匹配 哈希算法(白书p374)
hash Description dr所在国度的有个奇怪的规定:他们的字母不是a~z,而是用1~1000表示. 利用这个奇怪的规定,dr想出了一个好玩的游戏:首先给出n个字符串(当然每个字符用1~ ...
- navicat 导出查询结果
请依照下列步骤:(Windows 版本) 例子:导出查询结果到一个文本文件 在执行查询之后,保存查询及在工具栏点击导出向导/导出. 按照导出向导的步骤指导你完成 设置导出文件格式(步骤 1) 设置目标 ...
- API网关Kong
官网:https://konghq.com/ 各种方式安装汇总:https://konghq.com/install/ 命令列表:https://docs.konghq.com/0.14.x/admi ...