对象存储OSS(微信小程序直传实践)

这篇具有很好参考价值的文章主要介绍了对象存储OSS(微信小程序直传实践)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

对象存储OSS(微信小程序直传实践)

一、配置Bucket跨域访问

客户端进行表单直传到OSS时,会从浏览器向OSS发送带有Origin的请求消息。OSS对带有Origin头的请求消息会进行跨域规则(CORS)的验证。因此需要为Bucket设置跨域规则以支持Post方法。

  1. 登录阿里云OSS管理控制台

  2. 单击Bucket列表,然后单击目标Bucket名称

  3. 在左侧导航栏,选择权限管理 > 跨域设置,然后在跨域设置区域,单击设置

  4. 单击创建规则,配置如下图所示

对象存储OSS(微信小程序直传实践)
对象存储OSS(微信小程序直传实践)

对象存储OSS(微信小程序直传实践)

二、腾讯云创建云函数(Nodejs)

  1. 注册登录腾讯云账户

  2. 创建云函数

对象存储OSS(微信小程序直传实践)
对象存储OSS(微信小程序直传实践)

3.在云函数中部署签名服务,uploadOssHelper.js

const crypto = require("crypto-js");

class MpUploadOssHelper {
  constructor(options) {
    this.accessKeyId = options.accessKeyId;
    this.accessKeySecret = options.accessKeySecret;
    // 限制参数的生效时间,单位为小时,默认值为1。
    this.timeout = options.timeout || 1; 
    // 限制上传文件的大小,单位为MB,默认值为10。
    this.maxSize = options.maxSize || 10;
  }

  createUploadParams() {
    const policy = this.getPolicyBase64();
    const signature = this.signature(policy);
    return {
      OSSAccessKeyId: this.accessKeyId,
      policy: policy,
      signature: signature,
    };
  }

  getPolicyBase64() {
    let date = new Date();
    // 设置policy过期时间。
    date.setHours(date.getHours() + this.timeout);
    let srcT = date.toISOString();
    const policyText = {
      expiration: srcT,
      conditions: [
        // 限制上传文件大小。
        ["content-length-range", 0, this.maxSize * 1024 * 1024],
      ],
    };
    const buffer = Buffer.from(JSON.stringify(policyText));
    return buffer.toString("base64");
  }

  signature(policy) {
    return crypto.enc.Base64.stringify(
      crypto.HmacSHA1(policy, this.accessKeySecret)
    );
  }
}

module.exports = MpUploadOssHelper;

4.服务端请求接口

这里accessKeyId: ‘’,accessKeySecret: ''为阿里云申请

timeout 为限制参数的生效时间 默认时间为小时

maxSize 为每次上传至oss图片大小限制 默认为10MB

const express = require('express');
const app = express();
const MpUploadOssHelper = require("./uploadOssHelper.js");


app.get('/getPostObjectParams', (req, res) => {
  const mpHelper = new MpUploadOssHelper({
    accessKeyId: '<Your AccessKeyId>',
    accessKeySecret: '<Your AccessKeySecret>',
    // 限制参数的生效时间,单位为小时,默认值为1。
    timeout: 1,
    // 限制上传文件大小,单位为MB,默认值为10。
    maxSize: 10, 
  });

  // 生成参数。
  const params = mpHelper.createUploadParams();

  res.json(params);
})

5.部署完成

三、微信公众平台为所注册的小程序绑定域名(oss文件上传、下载,云函数)

  1. 进入微信公众平台后,开始配置域名
  2. oss域名在存储空间概览页的访问域名区域查看Bucket域名

对象存储OSS(微信小程序直传实践)

对象存储OSS(微信小程序直传实践)

四、小程序端开始上传图片

我这里使用的是Vant组件,(先以一张图片为例)点击上传图片,那么我们就可以获取到本张图片的上传路径,那么我们只需要将上传图片的路径对应到我们上传文件接口uploadFile接口下的filePath中,就可以上传文件,那么要想上传到我们的oss中,我们需要准备
对象存储OSS(微信小程序直传实践)

  1. ost:填写存储空间的访问域名,我们刚刚在微信公众平台上填写过的

  2. signature:我们需要在云函数的返回值中获取到的signature信息

  3. policy:填写在云函数的返回值中获取到的policy信息

  4. ossAccessKeyId:填写您的AccessKey ID

  5. key:设置文件上传至OSS后的文件路径

  6. securityToken:若使用STS认证,此项填写中,使用客户端签名在云函数的返回值获取到的SecurityToken 我们此处不需要

  7. filePath:填写待上传文件的文件路径

    const host = '<host>';
    const signature = '<signatureString>';
    const ossAccessKeyId = '<accessKey>';
    const policy = '<policyBase64Str>';
    const key = '<object name>';
    const securityToken = '<x-oss-security-token>'; 
    const filePath = '<filePath>'; // 待上传文件的文件路径。
    wx.uploadFile({
      url: host, // 开发者服务器的URL。
      filePath: filePath,
      name: 'file', // 必须填file。
      formData: {
        key,
        policy,
        OSSAccessKeyId: ossAccessKeyId,
        signature,
        // 'x-oss-security-token': securityToken // 使用STS签名时必传。
      },
      success: (res) => {
        if (res.statusCode === 204) {
          console.log('上传成功');
        }
      },
      fail: err => {
        console.log(err);
      }
    });
    

    五、读取oss中的图片

    这一步操作其实很简单,我们上传的图片路径为:我们在upload、downLoad配置的域名 + 我们上面设置的文件路径key值

    附加:Promise异步操作

    根据以上步骤我们就可以完成单张图片的上传,那么如果我们需要一次上传多张图片该怎么办呢?以小程序为例

    1、创建以文件路径和key值为参数的函数,用于将单张图片上传

    2、获取所需要上传的文件列表 fileList

    3、定义上传的promise任务栈 uploadPromiseTask

    4、通过for循环push进每一张所需要的上传的图片promise栈

    5、代码如下文章来源地址https://www.toymoban.com/news/detail-513728.html

    afterRead(event) {
            //console.log(this.data.fileList)
            wx.showLoading({
                title: '上传中...'
            })
            const { fileList } = this.data //获取所需要上传的文件列表
            let uploadPromiseTask = [] //定义上传的promise任务栈
            for (let i = 0; i < fileList.length; i++) {
                uploadPromiseTask.push(this.AI(fileList[i].url)) //push进每一张所需要的上传的图片promise栈
            }
            Promise.all(uploadPromiseTask).then(res => {
                //全部上传完毕
                this.topicSubmit()
                wx.hideLoading()
            }).catch(error => {
                //存在有上传失败的文件
                wx.hideLoading()
                wx.showToast({
                    title: '上传失败!',
                    icon: 'none',
                })
            })
        },
         {
                //存在有上传失败的文件
                wx.hideLoading()
                wx.showToast({
                    title: '上传失败!',
                    icon: 'none',
                })
            })
        },
    

到了这里,关于对象存储OSS(微信小程序直传实践)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序 - 超详细 “纯前端“ 将文件上传到阿里云 OSS,最新阿里云 OSS 直传音视频、图片、word、excel、ppt、office 文档(全程无需后端,前端文件直传阿里云oss服务器)

    网上的教程乱七八糟却文件少代码(并且没注释),而且都已经很老了,对于新手来说真的无从下手。 本文站在新手小白的角度, 实现微信小程序开发中,“前端直传” 上传文件到阿里云oss对象存储的详细教程, 无需后端 (纯前端自己完成所有签名、上传),保证 100% 成

    2024年02月13日
    浏览(147)
  • 云原生 - 微信小程序 COS 对象存储图片缓存强制更新解决方案

    遇到一个这样的情况:在微信小程序里图片缓存十分麻烦,网上很多说在腾讯云里的 COS 存储对象服务里设置对应的图片缓存(Header 头 Cache-Contorl),说实话真不好用,一会儿生效,一会儿没生效,而且量又大。于是,今天给大家分享一个简单粗暴的解决方案~ 以腾讯云为例,

    2024年01月23日
    浏览(36)
  • 微信小程序文件直接上传阿里云OSS

    第一步 配置Bucket跨域访问 第二步 微信小程序配置域名白名单 以上两步,请参考阿里云官网, 如何在微信小程序环境下将文件上传到OSS_对象存储 OSS-阿里云 https://help.aliyun.com/document_detail/92883.html 安装依赖 wx-oss-upload 然后创建自己的上传方法,引用 wx-oss-upload  然后在选取文

    2024年02月11日
    浏览(50)
  • 微信小程序将资源上传阿里云OSS

        我们在实际业务中经常能遇到将各种资源上传到云服务器,这样做第一是能更好的管理我们的比如图片资源,视频,音频资源等,同时也能节约公司的网络带宽,减少各种资源随着时间的推移资源越来越多造成服务器的硬盘压力过大。还有一个重要的原因是可以保护我们

    2024年02月13日
    浏览(42)
  • 阿里云Oss服务开通 #对象存储 #OSS

    1.点击立即开通 2.勾上协议,立即开通 3.成功,点击‘管理控制台’ 4.创建Bucket 5.勾选相关参数 6.勾选完的参数 7.进入Bucket 8.上传文件-测试 9.选择上传的文件 10.在主页面看到效果,点击详情查看 阿里云OSS服务API使用 常用入口:Access-Key 勾选 1. 访问控制(RAM) 创建用户**** 2. 短

    2024年01月25日
    浏览(59)
  • 阿里云-对象存储OSS

    大家好,我是 码赛客1024 ,今天我们一起来学习阿里云的对象存储服务OSS。 阿里云对象存储OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务,提供99.9999999999%(12个9)的数据持久性,99.995%的数据可用性。多种存储类型供选择,全面优化存储成本。 简单

    2024年01月16日
    浏览(94)
  • 什么是OSS对象存储?

    OSS 的英文全称是Object Storage Service,翻译成中文就是 对象存储服务 ,官方一点解释就是: 对象存储是一种使用HTTP API存储和检索非结构化数据和元数据对象的工具 OSS具有与平台无关的RESTful API接口,可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。 可以使

    2024年02月05日
    浏览(40)
  • OSS对象存储是什么?

    对象存储OSS是在云上提供无层次结构的分布式存储产品,为用户提供单价较低且快速可靠的数据存储方案。用户可通过云服务器实例或互联网使用 Web API 接口存储和检索数据。在 OSS 上的数据,用户使用指定域名的 URL 地址,通过 HTTP/HTTPS 协议存储和检索每个独立的数据对象。

    2024年02月16日
    浏览(40)
  • 阿里云对象存储(OSS)服务

    阿里云对象存储(OSS)服务 引入依赖 这里 aliyun-oss-spring-boot-starter 中默认引入的 aliyun-java-sdk-core 是 3.4.0 版本,但是 aliyun-spring-boot-dependencies 中对 aliyun-java-sdk-core 版本管理为:4.5.0,会导致版本冲突 所以排除 aliyun-oss-spring-boot-starter 默认的 aliyun-java-sdk-core ,单独引入 4.5.0 版

    2024年01月25日
    浏览(53)
  • 2.阿里云对象存储OSS

            文件上传,是指将本地图片、视频、音频等文件上传到服务器上,可以供其他用户浏览或下载的过程。文件上传在项目中应用非常广泛,我们经常发抖音、发朋友圈都用到了文件上传功能。 实现文件上传服务,需要有存储的支持,解决方案有以下几种: 存储方式

    2024年02月12日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包