百世创一
百世创一
  • 发布:2021-06-28 01:08
  • 更新:2023-04-26 17:10
  • 阅读:2799

uniapp如何上传AWS S3

分类:uni-app

找了很多资料,没有提及uniapp如何上传AWS S3的文件方法。没法子硬着头皮读AWS的英文文档。

开始使用了JS-SDK,搞了半天好不容易安装完成后,尝试调用上传文件的调用,结果发现最后要使用XMLHttpRequest(),结果一读uniapp的文档,不支持。白折腾大半天。只好另想他法。发现了一个基于表单的POST的方法,对比uniapp文档后,感觉uni.uploadFile()应该可以用,尝试了不同的方式,总算是通过uni.uploadFile()成功的传到了AWS S3上。

主要几点搞清楚了,也不是很复杂。

  1. 在AWS S3上,一定要把bucket桶的权限配置上,否则一定会老收到AccessDenied信息。
  2. 如何准备policy和如何计算签名,这个是第二步,可以按照文档的样例去验证签名逻辑。(https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html)(https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-HTTPPOSTConstructPolicy.html)
  3. 准备formData,这个一定要和policy里的定义对上(https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.html)
  4. 要配置一个成功上传后返回调用的XML,AWS S3上传成功后会调用这个XML来返回参数。否则上传成功了也收不到正确的响应。

uniapp没有开发底层的网络层日志,确实踩了不少的坑。

2 关注 分享
DCloud_heavensoft zhengfuzhe

要回复文章请先登录注册

1***@qq.com

1***@qq.com

回复 百世创一 :
方便问下您的签名计算是怎么调用的吗?使用 new SignatureV4 然后调用sign ,拿到的签名验证不通过
2023-04-26 17:10
1***@qq.com

1***@qq.com

成了成了 感谢大佬的思路
2022-12-15 15:15
1***@qq.com

1***@qq.com

我转成base64 的长度是736 他文档那个是864 不知道要怎么长度才能一样
2022-12-13 12:43
zhengfuzhe

zhengfuzhe

回复 百世创一 :
大佬 可以沟通下么,在评论中实在无法描述清楚,真心求教
2022-12-09 18:18
zhengfuzhe

zhengfuzhe

真心求助,愿意付费 digua897694309
2022-12-09 18:06
百世创一

百世创一 (作者)

回复 zhengfuzhe :
我们后台只是提供相关的密钥,在前端进行的签名计算,你等于是后端算好签名,然后给到前端,前端直接使用这个签名传吗?原理上是一样的,只是在哪里计算签名的问题而已。
2022-12-09 18:04
zhengfuzhe

zhengfuzhe

回复 百世创一 :
似乎没那么容易,我这边是使用后端给签名然后直传的方式,但是使用uploadFile会报错MethodNotAllowed,但是根本就不知道怎么调整,您说的1.2.3步实操起来实在是跟不上,这个文档实在是太难啃了
2022-12-09 17:16
百世创一

百世创一 (作者)

回复 zhengfuzhe :
按照我写的准备数据就可以。主要是确保你的加密逻辑和文档一致就可以,再通过AWS给的例子验证一下自己的计算逻辑就可以了。
2022-12-09 13:35
zhengfuzhe

zhengfuzhe

uniapp 直传aws 希望得到帮助 愿意付费
2022-12-08 22:24
百世创一

百世创一 (作者)

AWS的文档有一个样例,你先用样例的数据算一下结果是否一致,就能确认你的代码有没有问题。https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.html这里试一下你的代码。
2021-09-22 13:56