前端阿里云OSS直传,微信小程序版本

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

前言:

网络上许多的文章资料,全是使用阿里云官方的SDK,ali-oss插件去做直传。可是各位素未谋面的朋友要注意,这个SDK它支持web环境使用,也就是PC端浏览器

项目环境切换到微信小程序,是无法使用这种方式的,当然官方也有给出微信小程序直传的文档,继续往下看。

支持配置OSS直传的callback参数,这是其它文章中没用到的


官方:如何使用ali-oss进行直传https://help.aliyun.com/document_detail/64041.html?spm=a2c4g.383954.0.0.43c25e89vo4jkS

官方:微信小程序OSS直传https://help.aliyun.com/document_detail/92883.html?spm=a2c4g.31925.0.0.24de344egXVqTI

代码:

酒过三巡我还是少说话,多贴代码。并且把一些踩坑的地方告诉大家。继续往下看。

首先需要下载三个库。

注意:官方文档是让我们使用import { Base64 } from 'js-base64';   
可是它会它会报错!!!根本用不了。
所以需要换成import base64 from 'base-64';import utf8 from 'utf8'

npm install crypto-js --save

npm install base-64 --save

npm install utf8 --save


crypto-js:是阿里官方的签名库
base-64、utf8:是用来转码,配合crypto-js使用的


签名不都是后端的事情吗?没错大部分是后端。

但是我在官方文档看到客户端也可以签名,然后这么随口一说。

我亲爱的后端同事便说:客户端(前端)也可以签名,那就你自己签名吧。

配置callback(可选,根据后端要求来决定是否需要)

为什么需要使用callback,这就是后端的骚操作。
他要我们把文件顺利传到OSS后,再让OSS去请求他的接口。
他接口会去做一些业务逻辑,比如改文件的重命名。

而callback则是配置,后端处理业务逻辑的接口地址、接请求参数。


直传OSS配置callback是有格式要求的,并且微信小程序端、web端,callback的配置格式要求还不一样。
这里可能是因为用户们很少用到callback参数,官方文档写得也不准确。
大家按照我代码来,指定是没问题的。文章来源地址https://www.toymoban.com/news/detail-471907.html

import crypto from 'crypto-js'
import base64 from 'base-64'
import utf8 from 'utf8'
<script>
methods: {

    chooseAvatarEvent(event) {
      const { avatarUrl } = event.detail

      this.getFormDataParams().then(() => {
        this.uploadFile(avatarUrl, 'tmp/', e => {})
      })
    },

    // 计算签名。
    computeSignature(accessKeySecret, canonicalString) {
      console.log(crypto.enc)
      return crypto.enc.Base64.stringify(crypto.HmacSHA1(canonicalString, accessKeySecret))
    },

    getPolicyBase64() {
      const date = new Date()
      date.setHours(date.getHours() + 1)
      const policyText = {
        expiration: date.toISOString(), // 设置policy过期时间。
        conditions: [
          // 限制上传大小。
          ['content-length-range', 0, 1024 * 1024 * 1024],
        ],
      }
      return policyText
    },

    async getFormDataParams() {
      // 获取STS临时token,这是后端接口做的,找亲爱的后端
      const credentials = await queryOssGetStsToken()
      const policyText = this.getPolicyBase64()
      const uft8Str = utf8.encode(JSON.stringify(policyText))
      const policy = base64.encode(uft8Str)
      const signature = this.computeSignature(credentials.AccessKeySecret, policy)

      const user_id = this.userInfo.user_id

      const callback = {
        // 设置回调请求的服务器地址,且要求必须为公网地址。
        // 后端的接口地址:https://www.baidu.com/api/xxxx
        callbackUrl: credentials.callbackUrl,
        // 设置回调请求消息头中Host的值,即您的服务器配置的Host值。
        // host: 'yourHost',
        // 设置发起回调时请求body的值。
        callbackBody: 'bucket=${bucket}&object=${object}&etag=${etag}&size=${size}&mimeType=${mimeType}&imageInfo.height=${imageInfo.height}&imageInfo.width=${imageInfo.width}&imageInfo.format=${imageInfo.format}&type=avatar&user_id=' +
						user_id,
        // 设置发起回调请求的Content-Type。
        callbackBodyType: 'application/x-www-form-urlencoded',
      }
      const uft8Str_callback = utf8.encode(JSON.stringify(callback))
      const base64_callback = base64.encode(uft8Str_callback)
      const formData = {
        OSSAccessKeyId: credentials.AccessKeyId,
        signature,
        policy,
        'success_action_status': '200',
        'x-oss-security-token': credentials.SecurityToken,
        callback: base64_callback,
      }
      this.formData = formData
      console.log('formData===', this.formData)
    },

    uploadFile(filePath, dir, successc, failc) {
      const _this = this
      // 获取上传的文件类型
      let fileTypeIndex = filePath.lastIndexOf('.')
      let fileType = filePath.substring(fileTypeIndex)

      //图片名字 可以自行定义,     这里是采用当前的时间戳 + 150内的随机数来给图片命名的
      // const aliyunFileKey = dir + new Date().getTime() + Math.floor(Math.random() * 150) + '.png';
      const aliyunFileKey = dir + new Date().getTime() + Math.floor(Math.random() * 150) + fileType

      uni.uploadFile({
        // 注意:阿里云OSS的访问地址,并不是接口请求域名
        url: 'http://pxxxxx-xxxx-xxx.oss-cn-shenzhen.aliyuncs.com', //阿里云OSS访问地址
        filePath: filePath, //要上传文件资源的路径
        name: 'file', //必须填file
        formData: {
          'key': aliyunFileKey,
          ...this.formData
        },
        callback: this.formData.callback,
        success: function(res) {
          const resObj = JSON.parse(res.data)
          _this.userInfo.avatar_id = resObj.data.id
          _this.userInfo.avatar = resObj.data.url
          console.log('上传成功===', resObj)
        },
        fail: function(err) {
         
          // err.wxaddinfo = aliyunServerURL
          // failc(err)
        },
      })
    }

  }
</script>
<template>
    <view class="item-panel flex-1">
	    <u-image :src="userInfo.avatar" width="80rpx" height="80rpx" shape="circle"></u-image>
	    <button class="upload-box" open-type="chooseAvatar" @chooseavatar="chooseAvatarEvent"></button>
        <view class="ml-20 flex ai-center">
	        <u-icon name="arrow-right"></u-icon>
	    </view>
    </view>
</template>

<style lang="scss" scoped>
    .item-panel {
		display: flex;
		position: relative;

		.upload-box {
			position: absolute;
			width: 100%;
			height: 100%;
			opacity: 0;
			right: 0;
			top: 0;
		}
	}
</style>

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

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

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

相关文章

  • 如何使用阿里云OSS进行前端直传

    在使用阿里云OSS进行前端直传时,首先我们需要去阿里云官网注册自己的存储桶,然后申请相关的accessKeyId和accessKeySecret,然后新建一个桶,为这个桶命名以及选择对应的地区。 然后可以根据自己的业务,封装对应的组件,以下是根据我自己的项目,所封装的上传组件,所用

    2024年02月21日
    浏览(44)
  • 微信小程序纯前端从阿里云OSS下载json数据-完整版

    因为云开发开始收费(貌似很久了),准备改造在以前的小程序,数据转到oss上,小程序使用原生,不算专业领域, 所以先百度.... 网上的教程真的是千篇一律,大部分开局就是require(\\\'ali-oss\\\'); 好点的npm install ali-oss --save开局,拼凑操作到最后发现 要用云开发,因为云开发才

    2024年02月12日
    浏览(44)
  • 如何使用阿里云OSS进行前端直传以及分片上传

    在使用阿里云OSS进行前端直传时,首先我们需要去阿里云官网注册自己的存储桶,然后申请相关的accessKeyId和accessKeySecret,然后新建一个桶,为这个桶命名以及选择对应的地区。 然后可以根据自己的业务,封装对应的组件,以下是根据我自己的项目,所封装的上传组件,所用

    2024年02月21日
    浏览(45)
  • uniapp - [小程序 / H5网页] “纯前端“ 将文件上传到阿里云 OSS,全端通用的阿里云 OSS 直传音视频、图片、word、excel、ppt、office 文档(全程无需后端稳定可靠)

    网上的教程乱七八糟各种坑,而且 uniapp 各个端都是不同的教程,对于新手来说真的无从下手。 本文站在新手小白的角度, 实现 uniapp 小程序 / H5 网页等平台的开发中,“前端直传” 上传文件到阿里云oss对象存储的详细教程,通用的 “OSS 上传器”,几乎全平台都可以使用!

    2024年02月12日
    浏览(49)
  • 前端通过STS方式直传至阿里云OSS(包含文件上传、下载和自动刷新stsToken)

    最近项目业务需要实现一个资源管理的功能,就简单学习了一下前端怎么使用阿里云OSS。 原本这些事情都是后端实现的,但这样子有许多缺点,比如文件上传需要走两次,先上传到后端,再由后端上传至阿里云OSS,既占用带宽也浪费时间;此外,前端还不能获取到真正的上传

    2024年01月19日
    浏览(69)
  • 微信小程序将资源上传阿里云OSS

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

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

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

    2024年02月11日
    浏览(53)
  • 已解决:前端直传阿里oss报错跨域问题,“No ‘Access-Control-Allow-Origin‘”,这个错误基本就是在阿里的开放平台没做规则配置(附我封装的上传源码)

    就直接上阿里oss管理后台去增加一个跨域规则:见图片,特详细  配置成这样点确定就好了,就这么简单 标题其实就已经是答案了,但是以我的性格,我还是要介绍介绍案发背景,如果你比较着急,可以直接跳到解决方案那里看: 本来我就是个干前端的,也干安卓端(为啥

    2024年02月11日
    浏览(34)
  • 微信小程序上传文件(图片)至阿里云OSS,包含后端代码示例。

    ps:本文较为详细,需要有耐心的阅读,要是图片看不清楚可以下载到本地放大查看。 写这篇博客的主要目的是因为serverless架构下直接上传图片只能转base64,且body大小有限制 一、在阿里云创建RAM用户与角色 1.为什么要使用RAM用户? 云账号 AccessKey 是您访问阿里云 API 的密钥,具

    2024年02月04日
    浏览(50)
  • 微信小程序使用阿里云oss设置上传文件的content-type

    图片文件上传到阿里云oss的默认访问content-type是jpge,这个格式在浏览器不能直接打开,需要手动设置上传的content-type 参考链接 UploadTask wx.uploadFile(Object object) OSS调用PostObject用于通过HTML表单上传的方式将文件(Object)上传到指定存储空间(Bucket)。 阿里OSS 上传图片 springboo

    2024年02月12日
    浏览(71)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包