亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

預簽名的 S3 上傳 url 在到期時間之前到期

預簽名的 S3 上傳 url 在到期時間之前到期

Go
暮色呼如 2023-02-14 15:24:57
我有一個 lambda 來生成預簽名的上傳 URL。這是我用來獲取 URL 的代碼:    urlExpiresAt := time.Duration(10) * time.Second    s3Session := s3.New(awsSession)    request, _ := s3Session.PutObjectRequest(&s3.PutObjectInput{        Bucket:      aws.String(awssettings.FileStorageBucketName),        Key:         aws.String(fmt.Sprintf("%s/%s", *cognitoUser.Username, filename)),        ContentType: aws.String(uploadContentType),    })    uploadUrl, err := request.Presign(urlExpiresAt)在我的前端,我檢索該 URL 并立即嘗試向它發送上傳 POST 請求:    try {      const {        data: { fileUploadUrl },      } = await graphQlClient.query({        query: gql(getFileUploadUrlQuery),        variables: {          filename,        },      });      const formdata = new FormData();      formdata.append("file", file);      const ajaxRequest = new XMLHttpRequest();      ajaxRequest.upload.addEventListener("progress", progressHandler, false);      ajaxRequest.addEventListener("load", completeHandler, false);      ajaxRequest.addEventListener("error", errorHandler, false);      ajaxRequest.addEventListener("abort", abortHandler, false);      ajaxRequest.open("POST", fileUploadUrl);      ajaxRequest.send(formdata);    } catch (err) {      console.log(err);    }出于測試目的,我將我的存儲桶配置為可公開訪問:{    "Version": "2012-10-17",    "Statement": [        {            "Sid": "UploadFiles",            "Effect": "Allow",            "Principal": "*",            "Action": "s3:PutObject",            "Resource": "<bucketARN>/*"        }    ]}用于測試目的的 CORS 配置如下:[    {        "AllowedHeaders": [            "*"        ],        "AllowedMethods": [            "POST"        ],        "AllowedOrigins": [            "http://localhost:8080"        ],        "ExposeHeaders": []    }]CORS 飛行前請求返回狀態200,但是POST發送文件內容的請求被拒絕403并出現以下錯誤:<Error>  <Code>AccessDenied</Code>  <Message>Request has expired</Message>  <X-Amz-Expires>5</X-Amz-Expires>  <Expires>2022-09-07T04:14:50Z</Expires>  <ServerTime>2022-09-13T06:40:18Z</ServerTime>...</Error>閱讀此錯誤,看起來 URL 在預簽名之前已過期,這沒有意義。我在這里做錯了什么?
查看完整描述

1 回答

?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

我發現我的解決方案有兩個問題:


PUT首先,使用方法生成預簽名 URL ,而不是POST


其次,AWSAppSyncClient我使用 GraphQL 客戶端默認緩存查詢結果,所以我需要的只是禁用緩存fetchPolicy: "network-only"


    const {

        data: { fileUploadUrl },

      } = await graphQlClient.query({

        query: gql(getFileUploadUrlQuery),

        fetchPolicy: "network-only",       // <- THIS LINE

        variables: {

          filename,

        },

      });


查看完整回答
反對 回復 2023-02-14
  • 1 回答
  • 0 關注
  • 188 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號