Código de carga del subprograma WeChat a Alibaba Cloud OSS

Código de carga del subprograma WeChat a Alibaba Cloud OSS

primer paso

Cree una carpeta config.js en el directorio raíz

var fileHost="xxxx.aliyuncs.com(你的阿里云oss地址)"
var config = {
    
    
  //aliyun OSS config
  uploadImageUrl: `${
      
      fileHost}`, //默认存在根目录,可根据需求改
  AccessKeySecret: '填你自己的AccessKeySecret',
  OSSAccessKeyId: '填你自己的 OSSAccessKeyId',
  timeout: 87600 //这个是上传文件时Policy的失效时间
};
module.exports = config

segundo paso

Refactorización de código . Modificado para usar la interfaz del subprograma WeChat . Para conocer la fuente de varios algoritmos utilizados en el código , consulte la respuesta original en la parte inferior de la respuesta para obtener más detalles.
Base64, hmac, sha1, algoritmos relacionados con criptografía haga clic aquí .

const env = require('../config.js');

const Base64 = require('./Base64.js');
//Base64,hmac,sha1,crypto相关算法
//参考这里https://github.com/peterhuang007/weixinFileToaliyun.git

require('./hmac.js');
require('./sha1.js');
const Crypto = require('./crypto.js');


const uploadFile = function (params) {
    
    
  if (!params.filePath || params.filePath.length < 9) {
    
    
    wx.showModal({
    
    
      title: '图片错误',
      content: '请重试',
      showCancel: false,
    })
    return;
  }
  const aliyunFileKey = params.dir + params.filePath.replace('wxfile://', '');

  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;

  const bytes = Crypto.HMAC(Crypto.SHA1, policyBase64, accesskey, {
    
    
    asBytes: true
  });
  const signature = Crypto.util.bytesToBase64(bytes);

  return signature;
}

module.exports = uploadFile;

tercer paso

Instrucciones

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

donde sea necesario

uploadImage(
{
    
    
  filePath: filePath,
  dir: "images/",
  success: function (res) {
    
    
    console.log("上传成功")
  },
  fail: function (res) {
    
    
    console.log("上传失败")
    console.log(res)
  }
})

documento

parámetro tipo requerido ilustrar
ruta de archivo Cadena Nombre de archivo local de WeChat
directorio Cadena Guarde en el directorio oss de Alibaba Cloud, puede completar "" (cadena vacía)
éxito Función No La función de devolución de llamada para una carga exitosa, el valor de retorno es la ruta de red guardada
fallar Función No La función de devolución de llamada por falla de carga, el valor devuelto es consistente con la documentación oficial de la API del archivo de carga

Con respecto a la configuración de la dirección del servidor Alibaba Cloud oss:
se puede acceder a Alibaba Cloud oss ​​mediante https, pero si vinculamos nuestro propio nombre de dominio y luego accedemos a través de nuestro propio nombre de dominio, se producirá un error de certificado.

Solución : en lugar de usar el nombre de dominio vinculado por nosotros mismos, use el nombre de dominio predeterminado de Alibaba Cloud oss.

Este artículo se reproduce en los blogs de otras personas (libro breve)

Dirección original: https://www.jianshu.com/p/34d6dcbdc2e5 Blog de Jianshu

Supongo que te gusta

Origin blog.csdn.net/weixin_45582846/article/details/121886714
Recomendado
Clasificación