【问题标题】:AWS S3 PUT request with presigned URL not working in javascript带有预签名 URL 的 AWS S3 PUT 请求在 javascript 中不起作用
【发布时间】:2019-03-28 23:33:16
【问题描述】:

我正在使用 lambda 生成预签名签名以将文件上传到 S3 存储桶。当我将它与 Postman/CURL 一起使用时,lambda 返回的签名有效。但是,当我尝试从我的程序发出 PUT 请求时,它会将 localhost 附加到预签名的 URL。我在本地计算机上使用 IIS 作为 Web 服务器。 可能与 IIS 配置有关吗?还是我在代码或应用配置本身中做错了什么?

http://localhost/admin/%22https://sky-testwebsite-upload.s3.amazonaws.com/myfiletoupload.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=3600&X-Amz-Date=20190328T231808Z&X-Amz-SignedHeaders=host&X-Amz-Security-Token=FQoGZXIvYXdzEJH%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaDHkQ6M3FyxPqcLENgSLzAUmW1nKDxcQt29OwkBhwPYnGk1GTBXwfMVgGJ1DfeATPyg6QZyxgB02hdPYPFNogxmZ0g4g6EG2mGQrqYAfsLaWJtwyOZU4lS3eQCNlevwjGRqEPehhrfQD8kD5keqiagrA5%2FCAXETN9dSW%2FwQD9%2B%2FOWnBhUTPaHncDt9cRNtm6G64u8htrG9Yzo3d%2FylbbCtEKYAirbrHBOLOzzcq%2FwZWj%2FQ9eq13qiXFYAqZEKiRpl1EPCNZy8dLywOYI0fyatzyf%2FBo5aXO%2BihFNHIfHIO4rpve8KMlvkNGtedsoeUXXP5GJi6vyIRm%2BOKSQH%2BpP8JXyiGqfXkBQ%3D%3D&X-Amz-Credential=ASIAYG7KDJKY75ML2HOH%2F20190328%2Fap-southeast-2%2Fs3%2Faws4_request&X-Amz-Signature=6280eb6f7f2c3cc26ff32ec5a4f542eb1f5a495f2e2efba6006445fe16d4c3e7%22

我的代码如下:

const xhr = new XMLHttpRequest();
xhr.open('PUT', preSignedURL);
xhr.onreadystatechange = () => {
  if(xhr.readyState === 4){
    if(xhr.status === 200){
      alert('File Ready to n upload. xhr.status: ' + xhr.status + 'xhrstatustext:' +xhr.statusText);

    }
    else{

      alert('Could not upload file.');
    }
  }
};
xhr.send(file);

【问题讨论】:

标签: javascript jquery amazon-web-services amazon-s3


【解决方案1】:

这是我自己想出来的。 lambda 函数返回的 URL 格式不正确。我所要做的就是删除第一个和最后一个引号,然后我的文件被上传到 S3。

var preSignedURL = preSignedURL.substring(1, preSignedURL.length-1);

干杯!

【讨论】:

  • 您可能实际上需要JSON.parse() 值而不是仅仅删除引号。如果您不这样做,那么您的解决方案可能很脆弱,对负载敏感,以后可能会崩溃。
猜你喜欢
  • 2022-07-16
  • 2021-05-26
  • 1970-01-01
  • 2018-10-20
  • 1970-01-01
  • 2023-01-27
  • 2021-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多