我們有:
- 具有 CORS 設定的 S3 存盤桶
[
{
"AllowedHeaders": [],
"AllowedMethods": [
"GET",
"POST",
"HEAD",
"PUT",
"DELETE"
],
"AllowedOrigins": [
"*"
],
"ExposeHeaders": [
"Authorization"
]
}
]
- 預簽名 POST python 代碼
return self._client.generate_presigned_post(
bucket_name or self._bucket_name,
str(self._s3_bucket_root / full_path),
Fields={
'ACL': 'public-read'
},
Conditions=[{
'ACL': 'public-read'
}],
ExpiresIn=ttl or self._default_s3_file_ttl
)
- 反應我們得到錯誤的部分
Object.keys(signature).forEach((key) => {
formData.append(key, signature[key]);
})
formData.append('files', file, file.filename);
console.log('pureApolloClient.mutate // formData', formData);
axios.post(
url,
formData,
{
headers: {'Content-Type': 'application/octet-stream'}
}
);
- Firefox:
http://localhost:3000控制臺錯誤
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://hr-eco-bucket.s3.amazonaws.com/. (Reason: CORS request did not succeed).
我大約一個星期不知道出了什么問題。CORS 設定為最大訪問權限,我應該不會出錯
UPD 1:使用預先簽名的 URL 上傳與 python 測驗完美配合
signature = uploader.generate_presigned_url(fv.id, submission_uuid, submission_filename)
resp = requests.post(
signature['url'],
data=signature['fields'],
files={'file': (submission_filename, file_content)}
)
pdb.set_trace()
assert resp.status_code == 204
file_resp = requests.get(
f'https://hr-eco-bucket.s3.eu-central-1.amazonaws.com/client-upload/vacancy/{fv.id}/submission/{submission_uuid}/{submission_filename}'
)
assert file_resp.content == file_content
UPD 2:我不確定這些螢屏截圖有什么幫助。


uj5u.com熱心網友回復:
關閉 AWS 并嘗試其他云解決方案。如果存在無法通過檔案或指南明確解決的錯誤,則不應使用該服務。
UPD:說起來真的很難過,但我已經嘗試過 GCP Storage 并且它奏效了。不用擔心,我剛剛設定了 CORS 標頭、設定了存盤桶策略以及上述所有代碼庫和設定(AWS 除外),它們與 GCP 配合良好。我希望這里會有另一個答案——我無法相信 S3 無法以簡單的方式設定為與 CORS 一起使用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/339540.html
標籤:亚马逊网络服务 亚马逊-s3 科尔斯 boto3 预签名网址
