通过uni-app使用阿里云OSS的nodejs sdk遇到的一个坑

问题:
通过uni-app云函数去访问阿里云OSS时,调用list函数[1] 并且使用prefix参数来模拟目录访问时,出现某些前缀下的prefixes和objects均为undefine的问题。

背景:
近期有个小需求,通过uni-app托管在阿里云serveless的js函数,去调用OSS接口,以便于获得类似只读网盘的效果。
由于OSS是对象存储,不存在目录这个概念。所有的文件实际上是平面化管理,但是我们可以通过list函数的两个参数prefix和delimiter去获得模拟目录分组的效果。prefix就是目录名称,delimiter是分隔符,我们分隔符一般都用"/"。

解决
追溯和解决的过程也简单,看看问题是出在uni-app问题上还是阿里云OSS问题上。

首先开一个单独的项目调试了一下ali-oss的nodejs的sdk,直接就发现了问题。

由于上传到oss的文件中有点文件名称是带"+“的,但是在uni-app中,跳转页面会有一个空格转换,url中的空格会被转换为”+",到下一个页面后会将"+“恢复为空格。问题在于参数当中本身就存在”+",无需转换,导致传入的前缀名本身在uni-app的下一页中"+“被改成了空格,再次传入到oss中会发现前缀不存在。因此在通过任何使用url传输的参数时,一定要留意“+”被替换为空格的问题,使用oss的list函数时,如果目录名中存在空格,出现了上述的问题,请在prefix参数上.replace(” “, “+”),将空格手动替换为”+"。

空格转换是任何浏览器在进行url编码时都会做的事情。
浏览器在进行打开和跳转时,会对url进行编码,空格会被编码成"+",然后到下一个页面会自动还原。但是问题来了,有时原本就是加号的内容也会被转回为空格。就导致了之前的问题。
uni-app本身底层使用的仍然是WebView,出现这个问题也是在所难免。我们在浏览器中开发前端页面习惯了这种转换一般会规避,但是由于uni-app封装了很多东西,如果不多作注意,可能会被浏览器原生的特性坑到。

参考资料:
1.^ 阿里云OSS开发文档 列举文件
2.^ uni-app navigateto

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值