小程序直传阿里云OSS 踩坑

阿里云小程序直传OSS参考链接:https://help.aliyun.com/document_detail/92883.html?spm=a2c4g.11186623.6.671.4bdd2f08VSVv2v#title-aa7-de0-7tw
以下是记录自己在配置小程序直传阿里云遇到的问题以及解决办法
必备条件:🏁

  1. Bucket
    外网访问 Bucket 域名 也可以是自己绑定oss对应的域名
OSS的配置中,获取到配置的bucket (在使用host的时候需要做拼接),这个一般是需要我们与阿里云的域名进行拼接的
`https://${Bucket}.oss-cn-beijing.aliyuncs.com`
eg: let Bucket = 'zzfly'
let host = 'https://zzfly.oss-cn-beijing.aliyuncs.com'
  1. OSSAccessKeyId (可以直接在阿里云服务器的配置信息里面找到)
	阿里云 AccessKey ID
  1. AccessKeySecret:
	阿里云 Access Key Secret

在这里插入图片描述
一般在公司里面,如果所有资源统一上传至阿里云,获取以上三个参数基本是会使用接口请求回来的。

* 如果是在h5或者web端,只要获取到以上三个参数,那么就可以直接调用阿里云的api `put()` 方法,将文件对象上传到阿里云进行存储。
* 如果是在小程序中直传阿里云,第一次使用可能会遇到很多的坑,下面是一些我在直传阿里云的时候遇到的问题以及解决办法

小程序直传ali-oss问题:
首先,看一下小程序是如何直传阿里云的:
如图:
在这里插入图片描述
小程序的直传阿里云,我们利用的是微信的原生apiwx.upLoadFile,为什么不使用像h5,web端那样的方式,直接调用ali-oss的put()方法进行上传呢?

  1. 小程序很特殊,它是没有File,Blob这两个内置对象的,所以说,h5和web端上传的路就给我们封死了

  2. 小程序获取的文件地址是一个临时的地址,如果要上传,我们只能使用它的上传api wx.upLoadFile(),具体用法请自行走向官网api手册。
    上传之前,先对formData中对几个参数做一个详细的解释:
    key:等同于 OSSAccessKeyId,上面已经解释过了
    OSSAccessKeyId: 等同于AccessKeySecret,上面已经解释过了
    policy:加密规则,那么坑位来了,第一个坑位,就是这个加密规则:
    在这里插入图片描述

    这种东西我刚开始看见的时候一脸懵,一方有难,找八方支援,最后排查到可能是由于h5和web端policy加密规则和signature这个两个引起的,最后,**单独给小程序开了一个ali-oss账户,只需要key和secret,不需要加密规则和签名。**完美解决这个问题

  3. success_action_status: 这个是个固定值 200,具体这个是干什么的也没有去深究,能用就行
    解决了这个问题,就可以开始上传了,会发现,又会报错,是真的很烦,因为直传阿里云已经做了一周多了,现在才闲下来,才有时间记录问题,我也记不清楚报的什么错了,只记得好像是与证书有关。这个时候,很明显我直接把锅甩给了运维(因为阿里云配置是运维在操作),毕竟是证书,那么肯定就是服务器配置的问题,尴尬的是这口锅没成功甩出去。还砸到自己头上了,排查后发现,我们在使用wx.upLoadFile()进行文件上传的时候,需要在小程序的公众平台里面配置文件上传域名(文件下载的时候也一样,需要配置下载域名)。

在这里插入图片描述
注意:小程序只支持https的协议哦

到此位置,我们就可以完美的上传到阿里云了,上传成功之后,success回调中会返回给我们阿里云的文件地址,就可以进行下一步操作了。

=====================================================================================
当然,正常情况下是上传成功了,又时候也会遇到上传失败的问题,这是真么回事呢?

  • 正常情况下,如果一个文件的路径在阿里云中无法找到的时候,是可以允许正常上传的。但是,如果一个图片的地址本身就是阿里云中的地址,这个时候阿里云是不会让再一次上传该图片的,所以会报错,上传失败,就需要咱们在进行图片上传的时候做一个简简单单的过滤操作了哦。

最后附上一份大佬的源码demo地址,大家可以去参考一下:
https://github.com/hujinchen/Image_upload_aliyun

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值