本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用預先簽章的 URL 上傳物件
您可以使用預先簽章的 URL,允許某人將物件上傳到您的 Amazon S3 儲存貯體。使用預先簽章的 URL 將允許上傳,而不需要其他方擁有 AWS 安全登入資料或許可。預先簽章的 URL 受到建立它的使用者許可所限制。也就是說,如果您收到上傳物件的預先簽章 URL,則只有該 URL 建立者具有上傳該物件的必要許可時,您才能上傳物件。
當有人使用 URL 上傳物件時,Amazon S3 會於指定儲存貯體建立物件。如果儲存貯體中已具備您在預先簽章 URL 中指定之相同金鑰的物件,則 Amazon S3 會使用上傳的物件來取代現有的物件。上傳後,儲存貯體擁有者將擁有該物件。
如需預先簽章的 URL 一般資訊,請參閱 使用預先簽章的 URL 來下載和上傳物件。
您可使用 AWS
Explorer for Visual Studio 建立上傳物件的預先簽章 URL,而無須撰寫任何程式碼。您可以使用 AWS SDK,透過編寫程式的方式產生預先簽章的 URL。
目前 AWS Toolkit for Visual Studio 不支援 Visual Studio for Mac。
-
AWS Toolkit for Visual Studio 使用 AWS Toolkit for Visual Studio 使用者指南中的下列指示安裝和設定 Toolkit for Visual Studio。
-
AWS 使用 AWS Toolkit for Visual Studio 使用者指南中的下列步驟連接至 。 AWS
-
在標示為 AWS Explorer 的左側面板中,以滑鼠右鍵按一下在您想要上傳物件的目的地儲存貯體。
-
選擇建立預先簽章的 URL...。
-
在快顯視窗中,設定您預先簽章 URL 的到期日期和時間。
-
針對物件金鑰,設定要上傳的檔案名稱。您上傳的檔案必須完全符合此名稱。如果儲存貯體中已存在具有相同物件金鑰的物件,則 Amazon S3 會使用新上傳的物件來取代現有物件。
-
選擇 PUT 以指定將使用此預先簽章的 URL 來上傳物件。
-
選擇產生按鈕。
-
若要複製剪貼簿連結,請選擇複製。
-
若要使用此 URL,您可以傳送包含 curl
命令的 PUT 請求。包含您檔案的完整路徑和預先簽章的 URL 本身。
curl -X PUT -T "/path/to/file
" "presigned URL
"
您可以產生預先簽章的 URL,在有限的時間內執行 S3 動作。
如果您使用 AWS CLI 或 AWS SDKs,預先簽章 URLs的過期時間最多可設定為 7 天。如需詳細資訊,請參閱預先簽章 URLs的過期時間。
- Python
-
下列 Python 指令碼會產生PUT
預先簽章的 URL,用於將物件上傳至 S3 一般用途儲存貯體。
-
複製指令碼的內容並將其儲存為「put-only-url.py
」檔案。若要使用下列範例,請將使用者輸入預留位置取代
為您自己的資訊 (例如您的檔案名稱)。
import argparse
import boto3
from botocore.exceptions import ClientError
def generate_presigned_url(s3_client, client_method, method_parameters, expires_in):
"""
Generate a presigned Amazon S3 URL that can be used to perform an action.
:param s3_client: A Boto3 Amazon S3 client.
:param client_method: The name of the client method that the URL performs.
:param method_parameters: The parameters of the specified client method.
:param expires_in: The number of seconds the presigned URL is valid for.
:return: The presigned URL.
"""
try:
url = s3_client.generate_presigned_url(
ClientMethod=client_method,
Params=method_parameters,
ExpiresIn=expires_in
)
except ClientError:
print(f"Couldn't get a presigned URL for client method '{client_method}'.")
raise
return url
def main():
parser = argparse.ArgumentParser()
parser.add_argument("bucket", help="The name of the bucket.")
parser.add_argument(
"key", help="The key (path and filename) in the S3 bucket.",
)
args = parser.parse_args()
# By default, this will use credentials from ~/.aws/credentials
s3_client = boto3.client("s3")
# The presigned URL is specified to expire in 1000 seconds
url = generate_presigned_url(
s3_client,
"put_object",
{"Bucket": args.bucket, "Key": args.key},
1000
)
print(f"Generated PUT presigned URL: {url}")
if __name__ == "__main__":
main()
-
若要產生用於上傳檔案的PUT
預先簽章 URL,請使用您的儲存貯體名稱和所需的物件路徑執行下列指令碼。
下列命令使用範例值。將使用者輸入預留位置
取代為您自己的資訊。
python put-only-url.py
amzn-s3-demo-bucket
<object-path>
指令碼將輸出PUT
預先簽章的 URL:
Generated PUT presigned URL: https://amzn-s3-demo-bucket
.s3.amazonaws.com/object.txt
?AWS AccessKeyId=AKIAIOSFODNN7EXAMPLE
&Signature=vjbyNxybdZaMmLa%2ByT372YEAiv4%3D
&Expires=1741978496
-
您現在可以使用產生的預先簽章 URL 搭配 curl 上傳檔案:
curl -X PUT -T "path/to/your/local/file"
"generated-presigned-url"
如需使用 AWS SDKs 產生預先簽章 URL 以上傳物件的更多範例,請參閱使用 AWS SDK 為 Amazon S3 建立預先簽章 URL。