本人今年6月份毕业,最近刚在上海一家小公司实习,做微信小程序开发。最近工作遇到一个小问题。

微信小程序图片上传阿里云服务器Oss也折腾了蛮久才解决的,所以特意去记录一下。

第一步:配置阿里云地址:

我们公司是阿里云地址是会改变的,所以需要动态的从后台获取配置

  1. var client = hprose.Client.create(app.globalym, ["get_oss_config"]);
  2. client.get_oss_config(******, *****).then(function (res) {
  3. var res = JSON.parse(res);//从后台返回的oss账号数据
  4. if (res.code == 1) {//判断是否得到
  5. env = {
  6. //aliyun OSS config
  7. uploadImageUrl: 'https://' + res.body.bucket + '.' + res.body.area + '.com', //默认存在根目录,可根据需求改
  8. AccessKeySecret: res.body.accesskey,
  9. OSSAccessKeyId: res.body.accessid,
  10. timeout: 87600 //这个是上传文件时Policy的失效时间
  11. };
  12. }
  13. }, function (err) {
  14. console.log('请求oss配置失败');
  15. console.log(err);
  16. });

主要是这部分。这是配置内容

  1. env = {
  2. //aliyun OSS config
  3. uploadImageUrl: 'https://' + res.body.bucket + '.' + res.body.area + '.com', //默认存在根目录,可根据需求改
  4. AccessKeySecret: res.body.accesskey,
  5. OSSAccessKeyId: res.body.accessid,
  6. timeout: 87600 //这个是上传文件时Policy的失效时间
  7. };

第二步:引用上传图片的模块

  1. const uploadImage = require('../../utils/uploadAliyun.js');

uploadAliyun.js的内容

  1. const Base64 = require('./Base64.js');
  2. require('./hmac.js');
  3. require('./sha1.js');
  4. const Crypto = require('./crypto.js');
  5. var env = null
  6. const uploadFile = function (params) {
  7. env = params.envs
  8. if (!params.filePath) {
  9. wx.showModal({
  10. title: '图片错误',
  11. content: '请重试',
  12. showCancel: false,
  13. })
  14. return;
  15. }
  16. const aliyunFileKey = params.dir + params.filePath.replace('wxfile://', ''); //在手机上检测 注意
  17. //const aliyunFileKey = params.dir + params.filePath.replace('http://', ''); //在开发者工具里检测 注意
  18. const aliyunServerURL = env.uploadImageUrl;
  19. const accessid = env.OSSAccessKeyId;
  20. const policyBase64 = getPolicyBase64();
  21. const signature = getSignature(policyBase64);
  22. // console.log('aliyunFileKey=', aliyunFileKey);
  23. // console.log('aliyunServerURL', aliyunServerURL);
  24. wx.uploadFile({
  25. url: aliyunServerURL,
  26. filePath: params.filePath,
  27. name: 'file',
  28. formData: {
  29. 'key': aliyunFileKey,
  30. 'policy': policyBase64,
  31. 'OSSAccessKeyId': accessid,
  32. 'signature': signature,
  33. 'success_action_status': '200',
  34. },
  35. success: function (res) {
  36. if (res.statusCode != 200) {
  37. if(params.fail){
  38. params.fail(res)
  39. }
  40. return;
  41. }
  42. if(params.success){
  43. params.success(aliyunFileKey);
  44. }
  45. },
  46. fail: function (err) {
  47. err.wxaddinfo = aliyunServerURL;
  48. if (params.fail) {
  49. params.fail(err)
  50. }
  51. },
  52. })
  53. }
  54. const getPolicyBase64 = function () {
  55. let date = new Date();
  56. date.setHours(date.getHours() + env.timeout);
  57. let srcT = date.toISOString();
  58. const policyText = {
  59. "expiration": srcT, //设置该Policy的失效时间
  60. "conditions": [
  61. ["content-length-range", 0, 5 * 1024 * 1024] // 设置上传文件的大小限制,5mb
  62. ]
  63. };
  64. const policyBase64 = Base64.encode(JSON.stringify(policyText));
  65. return policyBase64;
  66. }
  67. const getSignature = function (policyBase64) {
  68. const accesskey = env.AccessKeySecret;
  69. // console.log(accesskey)
  70. const bytes = Crypto.HMAC(Crypto.SHA1, policyBase64, accesskey, {
  71. asBytes: true
  72. });
  73. const signature = Crypto.util.bytesToBase64(bytes);
  74. return signature;
  75. }
  76. module.exports = uploadFile;

注意如果想在开发者工具里检测上传结果,请使用这段代码

  1. const aliyunFileKey = params.dir + params.filePath.replace('http://', ''); //在开发者工具里检测 注意

在手机上要使用这段代码,不然要报错哦!

  1. const aliyunFileKey = params.dir + params.filePath.replace('wxfile://', ''); //在手机上检测 注意

第三步:在需要上传图片的地方,加上这段代码。

  1. uploadImage({
  2. filePath: res.tempFilePaths[0],
  3. dir: "images/",
  4. success: function (res) {
  5. console.log(res)
  6. },
  7. fail: function (res) {
  8. console.log("上传失败")
  9. console.log(res)
  10. },
  11. envs: env
  12. })

第四步:

Base64,js,hmac.js,sha1.js,crypto.js,uploadAliyun.js源码在这里,如果觉得这面文章对你有帮助的话,可给我点个star这里,谢谢!

最后,希望这篇文章对你有所帮助,真真确确是可以在微信小程序中上传图片到阿里云的。我也当做笔记记录一下。当然感谢原文对我的帮助,不然我这个小菜鸟怎么解决这个问题呢,哈哈!

微信小程序中图片上传阿里云Oss的更多相关文章

  1. [转]微信小程序实现图片上传功能

    本文转自:http://blog.csdn.net/feter1992/article/details/77877659 前端: 微信开发者工具 后端:.Net 服务器:阿里云 这里介绍微信小程序如何 ...

  2. 微信小程序实现图片上传功能

    前端: 微信开发者工具 后端:.Net 服务器:阿里云 这里介绍微信小程序如何实现上传图片到自己的服务器上 前端代码 data: { productInfo: {} }, //添加Banner bin ...

  3. 微信小程序--实现图片上传

    前端: 微信开发者工具 后端:.Net 服务器:阿里云 这里介绍微信小程序如何实现上传图片到自己的服务器上 前端代码 data: { productInfo: {} }, //添加Banner bin ...

  4. nodeJs实现微信小程序的图片上传

    今天我来介绍一下nodejs如何实现保存微信小程序传过来的图片及其返回 首先wx.uploadFile绝大部分时候是配合wx.chooseImage一起出现的,毕竟选择好了图片,再统一上传是实现用户图 ...

  5. 微信小程序实现图片上传,预览,删除

    wxml: <view class='imgBox'> <image class='imgList' wx:for="{{imgs}}" wx:for-item= ...

  6. 微信小程序 实现图片上传并展示到前端(多文件)并实现表单提交验证

    链接: https://blog.csdn.net/guanj0623/article/details/121595884?spm=1001.2014.3001.5501 https://blog.c ...

  7. 小程序实现图片上传,预览以及图片base64位处理

    最近一段时间在做小程序项目,第一期功也完工了.需要好好总结一下经验,把项目中遇到的问题好好总结一下,遇到的问题,踩过的坑.今天写一个小程序实现图片上传,预览,以及删除,图片base64位处理.下面就是 ...

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

           peterhuang007/weixinFileToaliyun: 微信小程序存放视频文件到阿里云用到算法js脚本文件 https://github.com/peterhuang007/ ...

  9. base64格式的图片上传阿里云

    base64格式的图片上传阿里云 上传图片的时候,除了普通的图片上传,还有一张图片信息是以base64格式发送到后台的. 后台接受base64格式的图片,上传至阿里云代码:(主要是将base64转化成 ...

随机推荐

  1. python,winreg,获取当前系统的桌面绝对路径

    import winreg import os def main(): new_path = os.path.join(desktop_path(), 'aaa.xlsx') # 结果为:C:\\Us ...

  2. JS代码,从一个数组中得到连号的数并显示

    JavaScript code function m() { var k = [1, 2, 7, 8, 9, 11, 22, 35, 36]; ) return; ; ; ; ; i < k.l ...

  3. postman接口测试使用

    在做测试之前,先要了解一下http相关的一些知识,这样做起来才会更加顺手. http的请求分为header 和 body,一般在header里面放一些其他的信息,比如cookie,浏览器信息 body ...

  4. CSS预处理技术

    CSS自定义变量 这是一个实验中的标准,后续的具体写法和解析可能会有变动. 与Less|Sass等预处理器不同的是CSS变量带有语义效果,并且不需要额外的编译.因为其名称本身就包含了语义的信息,这使得 ...

  5. 吴裕雄--python学习笔记:os模块函数

    os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'. os.getcwd:得 ...

  6. axios 传对象(JavaBean)到后台

    //user对象 let user = JSON.stringify({ userAccountNumber: own.userName, userPassword: own.userPassword ...

  7. mvn -v报java.lang.ClassNotFoundException

    Tips: 比如要下载版本3.2.5的,请选择binaries下的apache-maven-3.2.5-bin.zip. binaries 指的是可以执行的. source 指的源码. 下载地址:ht ...

  8. 选拔赛 hash 字符串匹配 哈希算法(白书p374)

    hash   Description dr所在国度的有个奇怪的规定:他们的字母不是a~z,而是用1~1000表示. 利用这个奇怪的规定,dr想出了一个好玩的游戏:首先给出n个字符串(当然每个字符用1~ ...

  9. navicat 导出查询结果

    请依照下列步骤:(Windows 版本) 例子:导出查询结果到一个文本文件 在执行查询之后,保存查询及在工具栏点击导出向导/导出. 按照导出向导的步骤指导你完成 设置导出文件格式(步骤 1) 设置目标 ...

  10. API网关Kong

    官网:https://konghq.com/ 各种方式安装汇总:https://konghq.com/install/ 命令列表:https://docs.konghq.com/0.14.x/admi ...