微信小程序中调用阿里云 OSS(Object Storage Service)上传文件

在微信小程序中调用阿里云 OSS(Object Storage Service)上传文件,可以通过以下步骤实现。由于微信小程序的运行环境是浏览器环境的一个子集,因此需要使用适合小程序的 OSS SDK 或手动实现上传逻辑。

 1. 准备工作
 1.1 获取阿里云 OSS 配置
 Bucket 名称:你的 OSS 存储桶名称。
 Region:存储桶所在的地域(如 osscnhangzhou)。
 AccessKeyId 和 AccessKeySecret:阿里云账号的访问密钥(建议使用 STS 临时凭证以提高安全性)。

 1.2 安装 OSS SDK
微信小程序不支持直接使用 Node.js 的 alioss SDK,因此需要使用适用于小程序的 OSS SDK,或者手动实现上传逻辑。

 2. 使用小程序 OSS SDK
阿里云官方提供了一个适用于小程序的 OSS SDK:[aliosswxsdk](https://github.com/alisdk/aliosswxsdk)。

 2.1 安装 SDK
在小程序项目中安装 SDK:
bash
npm install aliosswxsdk


 2.2 初始化 OSS 客户端
在小程序的 app.js 或页面逻辑中初始化 OSS 客户端:
javascript
const OSS = require('aliosswxsdk');

const client = new OSS({
  region: 'osscnhangzhou', // 你的 OSS Region
  accessKeyId: 'youraccesskeyid', // 你的 AccessKeyId
  accessKeySecret: 'youraccesskeysecret', // 你的 AccessKeySecret
  bucket: 'yourbucketname', // 你的 Bucket 名称
});


 2.3 上传文件
在小程序中选择文件并上传:
javascript
Page({
  data: {
    filePath: '',
  },

  // 选择文件
  chooseFile() {
    const that = this;
    wx.chooseImage({
      count: 1,
      success(res) {
        const tempFilePaths = res.tempFilePaths;
        that.setData({
          filePath: tempFilePaths[0],
        });
        that.uploadFile(tempFilePaths[0]);
      },
    });
  },

  // 上传文件
  uploadFile(filePath) {
    const fileName = filePath.split('/').pop(); // 获取文件名
    const fileKey = uploads/${fileName}; // 设置 OSS 上的文件路径

    client.put(fileKey, filePath).then((res) => {
      console.log('上传成功', res);
      wx.showToast({
        title: '上传成功',
        icon: 'success',
      });
    }).catch((err) => {
      console.error('上传失败', err);
      wx.showToast({
        title: '上传失败',
        icon: 'none',
      });
    });
  },
});


 2.4 页面布局
在小程序的页面布局中添加一个按钮,用于触发文件选择和上传:
xml
<view>
  <button bindtap="chooseFile">选择文件并上传</button>
</view>


 3. 使用 STS 临时凭证(推荐)
为了安全起见,建议使用 STS(Security Token Service)临时凭证来上传文件。你可以在后端生成临时凭证,然后传递给小程序前端使用。

 3.1 后端生成 STS 临时凭证
在后端(如 Node.js)中生成 STS 临时凭证:
javascript
const STS = require('alioss').STS;
const sts = new STS({
  accessKeyId: 'youraccesskeyid',
  accessKeySecret: 'youraccesskeysecret',
});

sts.assumeRole('yourrolearn', 'yourpolicy', 3600, 'yoursessionname').then((result) => {
  console.log(result.credentials);
}).catch((err) => {
  console.error(err);
});


 3.2 小程序使用 STS 临时凭证
在小程序中使用 STS 临时凭证初始化 OSS 客户端:
javascript
const client = new OSS({
  region: 'osscnhangzhou',
  accessKeyId: 'yourstsaccesskeyid',
  accessKeySecret: 'yourstsaccesskeysecret',
  stsToken: 'yourststoken',
  bucket: 'yourbucketname',
});


 4. 手动实现上传逻辑
如果你不想使用 SDK,可以手动实现 OSS 文件上传逻辑。以下是基于微信小程序 wx.uploadFile 的实现:

 4.1 获取上传签名
首先,从后端获取 OSS 上传签名(包括 Policy 和 Signature)。

 4.2 上传文件
使用 wx.uploadFile 上传文件:
javascript
wx.uploadFile({
  url: 'https://yourbucketname.osscnhangzhou.aliyuncs.com', // OSS 上传地址
  filePath: filePath, // 文件路径
  name: 'file', // 文件字段名
  formData: {
    key: uploads/${fileName}, // OSS 上的文件路径
    policy: 'yourpolicy', // 从后端获取的 Policy
    OSSAccessKeyId: 'youraccesskeyid', // 从后端获取的 AccessKeyId
    signature: 'yoursignature', // 从后端获取的 Signature
    success_action_status: '200', // 上传成功后的状态码
  },
  success(res) {
    console.log('上传成功', res);
    wx.showToast({
      title: '上传成功',
      icon: 'success',
    });
  },
  fail(err) {
    console.error('上传失败', err);
    wx.showToast({
      title: '上传失败',
      icon: 'none',
    });
  },
});


 5. 注意事项
 文件大小限制:微信小程序上传文件大小限制为 10MB,如果需要上传更大的文件,可以使用分片上传。
 安全性:不要在前端代码中暴露 AccessKeyId 和 AccessKeySecret,建议使用 STS 临时凭证。
 跨域问题:确保 OSS 的 Bucket 配置了正确的 CORS 规则,允许微信小程序的域名访问。

 总结
 使用 aliosswxsdk 可以方便地在微信小程序中上传文件到阿里云 OSS。
 推荐使用 STS 临时凭证以提高安全性。
 如果需要手动实现上传逻辑,可以使用 wx.uploadFile 并配合后端生成的签名。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/66647.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

排序算法——堆排序

什么是堆 堆就是一种特殊的二叉树&#xff0c;他有以下特点&#xff1a; 堆中某个节点的值总是不大于或不小于其父节点的值&#xff1b; 堆总是一棵完全二叉树。 堆又可以分为大根堆和小根堆 大根堆&#xff1a;根节点最大&#xff0c;每个节点都小于或等于父节点 小跟堆&am…

K-means算法在无监督学习中的应用

K-means算法在无监督学习中的应用 K-means算法是一种典型的无监督学习算法&#xff0c;广泛用于聚类分析。在无监督学习中&#xff0c;模型并不依赖于标签数据&#xff0c;而是根据输入数据的特征进行分组。K-means的目标是将数据集分成K个簇&#xff0c;使得同一簇内的数据点…

Linux 35.6 + JetPack v5.1.4之 pytorch升级

Linux 35.6 JetPack v5.1.4之 pytorch升级 1. 源由2. 升级步骤1&#xff1a;获取二进制版本步骤2&#xff1a;安装二进制版本步骤3&#xff1a;获取torchvision步骤4&#xff1a;安装torchvision步骤5&#xff1a;检查安装版本 3. 使用4. 补充4.1 torchvision版本问题4.2 支持…

Spring——自动装配

假设一个场景&#xff1a; 一个人&#xff08;Person&#xff09;有一条狗&#xff08;Dog&#xff09;和一只猫(Cat)&#xff0c;狗和猫都会叫&#xff0c;狗叫是“汪汪”&#xff0c;猫叫是“喵喵”&#xff0c;同时人还有一个自己的名字。 将上述场景 抽象出三个实体类&…

TCP与DNS的报文分析

场景拓扑&#xff1a; 核心路由配置&#xff1a; 上&#xff08;DNS&#xff09;&#xff1a;10.1.1.1/24 下(WEB)&#xff1a;20.1.1.1/24 左&#xff08;client&#xff09;&#xff1a;192.168.0.1/24 右(PC3)&#xff1a;192.168.1.1/24Clint2配置&a…

PWR-STM32电源控制

一、原理 睡眠模式不响应其他操作&#xff0c;比如烧写程序&#xff0c;烧写时按住复位键松手即可下载&#xff0c;在禁用JTAG也可如此烧写程序。 对于低功耗模式可以通过RTC唤醒、外部中断唤醒、中断唤醒。 1、电源框图&#xff1a; VDDA主要负责模拟部分的供电、Vref和Vref-…

WebSocket 测试入门篇

Websocket 是一种用于 H5 浏览器的实时通讯协议&#xff0c;可以做到数据的实时推送&#xff0c;可适用于广泛的工作环境&#xff0c;例如客服系统、物联网数据传输系统&#xff0c; 基础介绍 我们平常接触最多的是 http 协议的接口&#xff0c;http 协议是请求与响应的模式&…

基于机器学习的故障诊断(入门向)

一、原始信号的特征提取 1.EMD经验模态分解的作用 信号分析&#xff1a;EMD可以将信号分解为多个IMFs&#xff0c;每个IMF代表信号中的一个特定频率和幅度调制的成分。这使得EMD能够提供对信号的时频特征进行分析的能力&#xff08;特征提取用到的&#xff09;。信号去噪&…

【算法刷题】leetcode hot 100 双指针

文章目录 283. 移动零11. 盛最多水的容器15. 三数之和42. 接雨水 283. 移动零 https://leetcode.cn/problems/move-zeroes/description/?envTypestudy-plan-v2&envIdtop-100-liked 解法一&#xff1a; 找到第一个等于0的下标&#xff0c;然后继续向右找到第一个不等于0的…

【蓝桥杯选拔赛真题60】C++寻宝石 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解

目录 C++寻宝石 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 五、运行结果 六、考点分析 七、推荐资料 C++寻宝石 第十四届蓝桥杯青少年创意编程大赛C++选拔赛真题 一、题目要求 1、编程实现 有N(1<N<100)个盒子排成一排,每个盒子都放…

Nginx入门笔记

Nginx入门笔记 一、Nginx基本概念二、代理1、正向代理2、反向代理 三、准备工作1、CentOS 7安装nginx&#xff08;1&#xff09;. 安装必要的依赖&#xff08;2&#xff09;下载nginx&#xff08;3&#xff09;编译安装&#xff08;4&#xff09;编译并安装 Nginx(5)启动nginx …

重塑视频创作的格局!ComfyUI-Mochi本地部署教程

一、介绍 mochi是近期Genmo公司开源的先进视频生成模型&#xff0c;具有高保真运动和强大的提示遵循性。此模型的发布极大的缩小了闭源和开源视频生成系统之间的差距。 目前&#xff0c;视频生成模型与现实之间存在巨大差距。其中最影响视频生成的两个关键功能也就是运动质量和…

el-table自定义按钮控制扩展expand

需求&#xff1a;自定义按钮实现表格扩展内容的展开和收起&#xff0c;实现如下&#xff1a; 将type“expand”的表格列的宽度设置为width"1"&#xff0c;让该操作列不展示出来&#xff0c;然后通过ref动态调用组件的内部方法toggleRowExpansion(row, row.expanded)控…

Ubuntu 22.04 英伟达开发环境 CUDA 12.4 | cuDNN 9.0.0 | TensorRT 10.1 版本安装指南

NVIDIA 驱动安装 前置 笔者近期重整服务器&#xff0c;计划重新安装操作系统并配置新的开发环境。服务器的主要配置如下&#xff1a; Dell PowerEdge R730 Intel Xeon E5-2630v3 x2 64GB ECC DDR4 NVIDIA GeForce RTX 2080 Ti Rev. A Ubuntu 22.04.5 LTS x86_64 (No Desktop…

数据结构-栈、队列和数组

栈 栈的定义 栈是只允许在一端进行插入或删除操作的线性表。首先栈式一种线性表&#xff0c;但限定这种线性表只能在某一端进行插入和删除操作&#xff0c;如图所示。 栈包括&#xff1a; 栈顶&#xff08;Top&#xff09;。允许进入插入删除的那一端。 栈底&#xff08;Butt…

Mysql快速列出来所有列信息

文章目录 需求描述实现思路1、如何查表信息2、如何取字段描述信息3、如何将列信息一行展示4、拼接最终结果 需求描述 如何将MySQL数据库中指定表【tb_order】的所有字段都展示出来&#xff0c;以备注中的中文名为列名。 实现思路 最终展示效果&#xff0c;即拼接出可执行执行…

LLM大模型实践10-聊天机器人

大型语言模型带给我们的激动人心的一种可能性是&#xff0c;我们可以通过它构建定制的聊天机器人 &#xff08;Chatbot&#xff09;&#xff0c;而且只需很少的工作量。在这一章节的探索中&#xff0c;我们将带你了解如何利用会话形式&#xff0c;与具 有个性化特性&#xff08…

用python实现烟花代码,完整代码拿走不谢

有时候用python实现一些有趣的代码&#xff0c;既有趣&#xff0c;又能提升知识 使用Python实现动态烟花代码 效果如下&#xff1a; 不废话&#xff0c;直接上代码&#xff1a; import pygame from random import randint, uniform, choice import mathvector pygame.math…

【Java项目】基于SpringBoot的【校园交友系统】

【Java项目】基于SpringBoot的【校园交友系统】 技术简介&#xff1a;系统软件架构选择B/S模式、SpringBoot框架、java技术和MySQL数据库等&#xff0c;总体功能模块运用自顶向下的分层思想。 系统简介&#xff1a;系统主要包括管理员和用户。 (a) 管理员的功能主要有首页、个人…

使用强化学习训练神经网络玩俄罗斯方块

一、说明 在 2024 年暑假假期期间&#xff0c;Tim学习并应用了Q-Learning &#xff08;一种强化学习形式&#xff09;来训练神经网络玩简化版的俄罗斯方块游戏。在本文中&#xff0c;我将详细介绍我是如何做到这一点的。我希望这对任何有兴趣将强化学习应用于新领域的人有所帮助…