关于使用uniapp 使用uni.uploadFile 使用POST 上传到亚马逊 s3 上
第一点 是需要配置Policy的策略

然后把obj转成一个json的字符串 用base64.encode转成base64
我这个eres.credentials.expiration是取后端的 后端返回的是2022-12-15T08:21:47+00:00
acl不加是因为他报了一个Accessdenied 的问题
success_action_redirect 不加是因为他报了一个304 The bucket you are attempting to access must be addressed using the 。。。。

第二点 signature

注意 这边顺序有问题 按他这样顺序传入 亚马逊服务器那边会一直报签名不符合



这边是CryptoJS 用require 引入一下 var CryptoJS =require(‘…/…/…/util/CryptoJS.js’); 当然也可以网上找 用npm包也可以

var CryptoJS=CryptoJS||function(h,i){var e={},f=e.lib={},l=f.Base=function(){function a(){}return{extend:function(j){a.prototype=this;var d=new a;j&&d.mixIn(j);d.$super=this;return d},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var d in a)a.hasOwnProperty(d)&&(this[d]=a[d]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.$super.extend(this)}}}(),k=f.WordArray=l.extend({init:function(a,j){a=
this.words=a||[];this.sigBytes=j!=i?j:4*a.length},toString:function(a){return(a||m).stringify(this)},concat:function(a){var j=this.words,d=a.words,c=this.sigBytes,a=a.sigBytes;this.clamp();if(c%4)for(var b=0;b<a;b++)j[c+b>>>2]|=(d[b>>>2]>>>24-8*(b%4)&255)<<24-8*((c+b)%4);else if(65535<d.length)for(b=0;b<a;b+=4)j[c+b>>>2]=d[b>>>2];else j.push.apply(j,d);this.sigBytes+=a;return this},clamp:function(){var a=this.words,b=this.sigBytes;a[b>>>2]&=4294967295<<32-8*(b%4);a.length=h.ceil(b/4)},clone:function(){var a=
l.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var b=[],d=0;d<a;d+=4)b.push(4294967296*h.random()|0);return k.create(b,a)}}),o=e.enc={},m=o.Hex={stringify:function(a){for(var b=a.words,a=a.sigBytes,d=[],c=0;c<a;c++){var e=b[c>>>2]>>>24-8*(c%4)&255;d.push((e>>>4).toString(16));d.push((e&15).toString(16))}return d.join("")},parse:function(a){for(var b=a.length,d=[],c=0;c<b;c+=2)d[c>>>3]|=parseInt(a.substr(c,2),16)<<24-4*(c%8);return k.create(d,b/2)}},q=o.Latin1={stringify:function(a){for(var b=
a.words,a=a.sigBytes,d=[],c=0;c<a;c++)d.push(String.fromCharCode(b[c>>>2]>>>24-8*(c%4)&255));return d.join("")},parse:function(a){for(var b=a.length,d=[],c=0;c<b;c++)d[c>>>2]|=(a.charCodeAt(c)&255)<<24-8*(c%4);return k.create(d,b)}},r=o.Utf8={stringify:function(a){try{return decodeURIComponent(escape(q.stringify(a)))}catch(b){throw Error("Malformed UTF-8 data");}},parse:function(a){return q.parse(unescape(encodeURIComponent(a)))}},b=f.BufferedBlockAlgorithm=l.extend({reset:function(){this._data=k.create();
this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=r.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var b=this._data,d=b.words,c=b.sigBytes,e=this.blockSize,g=c/(4*e),g=a?h.ceil(g):h.max((g|0)-this._minBufferSize,0),a=g*e,c=h.min(4*a,c);if(a){for(var f=0;f<a;f+=e)this._doProcessBlock(d,f);f=d.splice(0,a);b.sigBytes-=c}return k.create(f,c)},clone:function(){var a=l.clone.call(this);a._data=this._data.clone();return a},_minBufferSize:0});f.Hasher=b.extend({init:function(){this.reset()},
reset:function(){b.reset.call(this);this._doReset()},update:function(a){this._append(a);this._process();return this},finalize:function(a){a&&this._append(a);this._doFinalize();return this._hash},clone:function(){var a=b.clone.call(this);a._hash=this._hash.clone();return a},blockSize:16,_createHelper:function(a){return function(b,d){return a.create(d).finalize(b)}},_createHmacHelper:function(a){return function(b,d){return g.HMAC.create(a,d).finalize(b)}}});var g=e.algo={};return e}(Math);
(function(h){var i=CryptoJS,e=i.lib,f=e.WordArray,e=e.Hasher,l=i.algo,k=[],o=[];(function(){function e(a){for(var b=h.sqrt(a),d=2;d<=b;d++)if(!(a%d))return!1;return!0}function f(a){return 4294967296*(a-(a|0))|0}for(var b=2,g=0;64>g;)e(b)&&(8>g&&(k[g]=f(h.pow(b,0.5))),o[g]=f(h.pow(b,1/3)),g++),b++})();var m=[],l=l.SHA256=e.extend({_doReset:function(){this._hash=f.create(k.slice(0))},_doProcessBlock:function(e,f){for(var b=this._hash.words,g=b[0],a=b[1],j=b[2],d=b[3],c=b[4],h=b[5],l=b[6],k=b[7],n=0;64>
n;n++){if(16>n)m[n]=e[f+n]|0;else{var i=m[n-15],p=m[n-2];m[n]=((i<<25|i>>>7)^(i<<14|i>>>18)^i>>>3)+m[n-7]+((p<<15|p>>>17)^(p<<13|p>>>19)^p>>>10)+m[n-16]}i=k+((c<<26|c>>>6)^(c<<21|c>>>11)^(c<<7|c>>>25))+(c&h^~c&l)+o[n]+m[n];p=((g<<30|g>>>2)^(g<<19|g>>>13)^(g<<10|g>>>22))+(g&a^g&j^a&j);k=l;l=h;h=c;c=d+i|0;d=j;j=a;a=g;g=i+p|0}b[0]=b[0]+g|0;b[1]=b[1]+a|0;b[2]=b[2]+j|0;b[3]=b[3]+d|0;b[4]=b[4]+c|0;b[5]=b[5]+h|0;b[6]=b[6]+l|0;b[7]=b[7]+k|0},_doFinalize:function(){var e=this._data,f=e.words,b=8*this._nDataBytes,
g=8*e.sigBytes;f[g>>>5]|=128<<24-g%32;f[(g+64>>>9<<4)+15]=b;e.sigBytes=4*f.length;this._process()}});i.SHA256=e._createHelper(l);i.HmacSHA256=e._createHmacHelper(l)})(Math);
(function(){var h=CryptoJS,i=h.enc.Utf8;h.algo.HMAC=h.lib.Base.extend({init:function(e,f){e=this._hasher=e.create();"string"==typeof f&&(f=i.parse(f));var h=e.blockSize,k=4*h;f.sigBytes>k&&(f=e.finalize(f));for(var o=this._oKey=f.clone(),m=this._iKey=f.clone(),q=o.words,r=m.words,b=0;b<h;b++)q[b]^=1549556828,r[b]^=909522486;o.sigBytes=m.sigBytes=k;this.reset()},reset:function(){var e=this._hasher;e.reset();e.update(this._iKey)},update:function(e){this._hasher.update(e);return this},finalize:function(e){var f=
this._hasher,e=f.finalize(e);f.reset();return f.finalize(this._oKey.clone().concat(e))}})})();
module.exports = CryptoJS

这个是base64的 var Base64 = require(‘…/…/…/util/base64.modified.js’); 导入就行

(function(global) {'use strict';var global = global || {};var _Base64 = global.Base64;var version = "1.0.0";var buffer;var b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';var b64tab = function(bin) {var t = {};for (var i = 0, l = bin.length; i < l; i++) t[bin.charAt(i)] = i;return t;}(b64chars);var fromCharCode = String.fromCharCode;var cb_utob = function(c) {if (c.length < 2) {var cc = c.charCodeAt(0);return cc < 0x80 ? c :cc < 0x800 ? (fromCharCode(0xc0 | (cc >>> 6)) +fromCharCode(0x80 | (cc & 0x3f))) :(fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) +fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) +fromCharCode(0x80 | (cc & 0x3f)));} else {var cc = 0x10000 +(c.charCodeAt(0) - 0xD800) * 0x400 +(c.charCodeAt(1) - 0xDC00);return (fromCharCode(0xf0 | ((cc >>> 18) & 0x07)) +fromCharCode(0x80 | ((cc >>> 12) & 0x3f)) +fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) +fromCharCode(0x80 | (cc & 0x3f)));}};var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g;var utob = function(u) {return u.replace(re_utob, cb_utob);};var cb_encode = function(ccc) {var padlen = [0, 2, 1][ccc.length % 3],ord = ccc.charCodeAt(0) << 16 |((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8) |((ccc.length > 2 ? ccc.charCodeAt(2) : 0)),chars = [b64chars.charAt(ord >>> 18),b64chars.charAt((ord >>> 12) & 63),padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),padlen >= 1 ? '=' : b64chars.charAt(ord & 63)];return chars.join('');};var btoa = global.btoa ? function(b) {return global.btoa(b);} : function(b) {return b.replace(/[\s\S]{1,3}/g, cb_encode);};var _encode = buffer ? function(u) {return (u.constructor === buffer.constructor ? u : new buffer(u)).toString('base64')} :function(u) { return btoa(utob(u)) };var encode = function(u, urisafe) {return !urisafe ?_encode(String(u)) :_encode(String(u)).replace(/[+\/]/g, function(m0) {return m0 == '+' ? '-' : '_';}).replace(/=/g, '');};var encodeURI = function(u) { return encode(u, true) };var re_btou = new RegExp(['[\xC0-\xDF][\x80-\xBF]','[\xE0-\xEF][\x80-\xBF]{2}','[\xF0-\xF7][\x80-\xBF]{3}'].join('|'), 'g');var cb_btou = function(cccc) {switch (cccc.length) {case 4:var cp = ((0x07 & cccc.charCodeAt(0)) << 18) |((0x3f & cccc.charCodeAt(1)) << 12) |((0x3f & cccc.charCodeAt(2)) << 6) |(0x3f & cccc.charCodeAt(3)),offset = cp - 0x10000;return (fromCharCode((offset >>> 10) + 0xD800) +fromCharCode((offset & 0x3FF) + 0xDC00));case 3:return fromCharCode(((0x0f & cccc.charCodeAt(0)) << 12) |((0x3f & cccc.charCodeAt(1)) << 6) |(0x3f & cccc.charCodeAt(2)));default:return fromCharCode(((0x1f & cccc.charCodeAt(0)) << 6) |(0x3f & cccc.charCodeAt(1)));}};var btou = function(b) {return b.replace(re_btou, cb_btou);};var cb_decode = function(cccc) {var len = cccc.length,padlen = len % 4,n = (len > 0 ? b64tab[cccc.charAt(0)] << 18 : 0) |(len > 1 ? b64tab[cccc.charAt(1)] << 12 : 0) |(len > 2 ? b64tab[cccc.charAt(2)] << 6 : 0) |(len > 3 ? b64tab[cccc.charAt(3)] : 0),chars = [fromCharCode(n >>> 16),fromCharCode((n >>> 8) & 0xff),fromCharCode(n & 0xff)];chars.length -= [0, 0, 2, 1][padlen];return chars.join('');};var atob = global.atob ? function(a) {return global.atob(a);} : function(a) {return a.replace(/[\s\S]{1,4}/g, cb_decode);};var _decode = buffer ? function(a) {return (a.constructor === buffer.constructor ?a : new buffer(a, 'base64')).toString();} :function(a) { return btou(atob(a)) };var decode = function(a) {return _decode(String(a).replace(/[-_]/g, function(m0) { return m0 == '-' ? '+' : '/' }).replace(/[^A-Za-z0-9\+\/]/g, ''));};var noConflict = function() {var Base64 = global.Base64;global.Base64 = _Base64;return Base64;};global.Base64 = {VERSION: version,atob: atob,btoa: btoa,fromBase64: decode,toBase64: encode,utob: utob,encode: encode,encodeURI: encodeURI,btou: btou,decode: decode,noConflict: noConflict};// if ES5 is available, make Base64.extendString() availableif (typeof Object.defineProperty === 'function') {var noEnum = function(v) {return { value: v, enumerable: false, writable: true, configurable: true };};global.Base64.extendString = function() {Object.defineProperty(String.prototype, 'fromBase64', noEnum(function() {return decode(this)}));Object.defineProperty(String.prototype, 'toBase64', noEnum(function(urisafe) {return encode(this, urisafe)}));Object.defineProperty(String.prototype, 'toBase64URI', noEnum(function() {return encode(this, true)}));};}module.exports = global.Base64;
})(this);

https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/API/sigv4-post-example.html 这个是官网文档
这文章只针对uniapp 的uni.uploadFile 我是在小程序上有 目前开发工具一切正常 真机的话 需要后台配置URL 这个不在我弄的范围

注意 uni.uploadFile 的地址我们是从后台那返回并且拼接的 我们是先获取sts的一个权限
注意: sigv4examplebucket 这个值是从后端取的
us-east-1 这个也是后端取的一个区域 官网上值得是代表什么区域可行好像 我也不清楚 反正是后端取的
https://sigv4examplebucket.s3.us-east-1.amazonaws.com.cn/
最后附上 最后上传的代码

很多东西都可以写死 conten-Type 就仁者见仁智者见智了
最后的最后 有问题 欢迎各位大佬指出 这篇文章主要就是记录我碰到的问题 防止我忘记了

uni.uploadFile 使用POST 上传到亚马逊 AMS s3 上相关推荐

  1. Node开发文件上传系统及向七牛云存储和亚马逊AWS S3的文件上传

    背景起,有奏乐: 有伟人曰:学习技能的最好途径莫过于理论与实践相结合. 初学Node这货时,每每读教程必会Fall asleep. 当真要开发系统时,顿觉精神百倍,即便踩坑无数也不失斗志. 因为同团队 ...

  2. FB接连出事儿?上亿用户记录在亚马逊云服务器上就公之于众了……下滑到第七?领英说苹果怎么就不受雇员欢迎了呢? | 极客头条...

    戳蓝字"CSDN云计算"关注我们哦! 极客头条:速递.最新.绝对有料.这里有企业新动.这里有业界要闻,打起十二分精神,紧跟fashion你可以的! 每周三次,打卡即read 更快. ...

  3. 英方软件科创板敲钟上市;亚马逊启动史上最大规模裁员;我国5G用户超全球平均水平2.75倍丨每日大事件...

    ‍ ‍数据智能产业创新服务媒体 --聚焦数智 · 改变商业 IPO 英方软件科创板敲钟上市 上海英方软件股份有限公司(简称"英方软件",688435.SH)于19日在上交所科创板上 ...

  4. 解决方案丨FortiGate NGFW在亚马逊云科技上的五大应用场景

    近日,2022年亚马逊云科技中国峰会圆满落幕!峰会指出,云计算已经成为各行各业数字化转型的技术底座.上云的趋势已经从互联网行业拓展到传统行业.全球网络安全领导者.亚马逊云科技的发布合作伙伴(Launc ...

  5. 在亚马逊云科技上搭建静态无服务器 Wordpress,每天仅需 0.01 美元

    声明:本文转自 DEV Community 网站,文章翻译由开发者社区提供: 点击下方链接,查看英文原文: https://dev.to/aws-builders/s... 你可能认为这篇文章是标题党 ...

  6. 阿里巴巴 OSS与AWS(亚马逊) S3 和腾讯云cos 存储服务 介绍篇

    前言 对象存储服务,简单来说,可以把它当成一个"网盘",可以上传下载数据,也可以直接在这个"网盘"中对文件进行某些操作. 1.定时或者基于某种条件自动地,每天从 ...

  7. 树莓派Zero W发布;亚马逊 AWS S3 服务出现故障 | IoT黑板报

    树莓派Zero W发布,配有Wi-Fi和蓝牙售价10美元 @cnBeta 为了庆祝树莓派的第五个生日,树莓派基金会推出了树莓派Zero W,它本质上是树莓派Zero ,但是添加了许多用户一直要求的功能 ...

  8. Ubuntu 配置亚马逊 aws cli 上传文件文件夹至 亚马逊 AWS S3

    当使用亚马逊云服务器进行深度学习模型训练时,需要将数据集上传,相比使用 UI 界面上传,使用命令行方式具有更快的上传速率. 配置步骤 安装 aws cli 客户端: pip install awscl ...

  9. 亚马逊html怎么上传,亚马逊 帮助: 如何上传“在线试读”文件

    如何上传"在线试读"文件 亚马逊的"在线试读"项目允许出版商以PDF格式提交图书的电子内容.下列常见问答描述了提交的格式标准和要求. 我需要具备什么条件才能参加 ...

最新文章

  1. CUDA运行时 Runtime(四)
  2. JS 获取字符串长度, 区别中英文
  3. c语言剪刀石头布课程设计,C++剪刀石头布游戏课程设计方案.doc
  4. 开篇词丨这样学Redis,才能技高一筹
  5. Ceph BlueStore 和双写问题
  6. 小鹤双拼记忆口诀_选择双拼之自然码
  7. ln: failed to create symbolic link ‘/usr/bin/mysql’: File exists
  8. shell编程之进阶篇三常见命令详解
  9. python 字符串匹配like_python中关于正则表达式一
  10. codeforce474D_组合
  11. HCIE Security DS V-P-N 备考笔记(幕布)
  12. ADS学习笔记—3.仿真实例
  13. 苹果电脑win10蓝牙音响卡顿_win10系统蓝牙音箱卡顿声音断断续续的处理办法
  14. 【C语言】猜灯谜问题
  15. rs485数据线接反_RS485引脚说明及接口说明
  16. 【WPS】未安装VBA支持库,无法运行文档中的宏。如需要启用宏功能,请点击这里了解详情。
  17. 用命令操作方式创建和管理数据库
  18. 五层协议体系结构的各层功能
  19. Microsoft sql server 获取系统当前日期(时间)
  20. ORY Hydra项目详解

热门文章

  1. 基于Java--获取城市天气与给手机发送验证码--HTTP协议实践
  2. Springboot 之 HandlerMethodArgumentResolver 运用
  3. 关于Oracle数据库的笔记
  4. Cesium渐变色3dtiles白模(视频)
  5. 别人都在这个春暖花开的端午节吃粽子,而我在踏青学springboot数据持久化
  6. 弘辽科技:企业可以在淘宝开几个店?有哪些优势?
  7. 手机中html文件能不能删除,如何彻底删除手机里的文件,并且不能被恢复?
  8. 苹果手机计算机怎么看以前的记录,苹果手机怎么查找以前的历史通话记录
  9. 使用python爬取高德POI数据,并转换为WGS84经纬度坐标的点矢量
  10. 理解Spring Security中permitAll()和anonymous()的区别