簡體   English   中英

帶有預簽名 URL 的 AWS S3 PUT 請求在 javascript 中不起作用

[英]AWS S3 PUT request with presigned URL not working in javascript

我正在使用 lambda 生成預先簽名的簽名以將文件上傳到 S3 存儲桶。 當我將 lambda 與 Postman/CURL 一起使用時,它返回的簽名有效。 但是,當我嘗試從我的程序發出 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 =宿主&X-AMZ-安全令牌= 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-憑證= ASIAYG7KDJKY75ML2HOH%2F20190328%2Fap-東南-2%2Fs3%2Faws4_request&X-AMZ-簽名= 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);

這是我自己想出來的。 lambda 函數返回的 URL 格式不正確。 我所要做的就是刪除第一個和最后一個引號,然后將我的文件上傳到 S3。

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

干杯!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM