

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Mengunggah objek dengan presigned URLs
<a name="PresignedUrlUploadObject"></a>



Anda dapat menggunakan presigned URLs untuk mengizinkan seseorang mengunggah objek ke bucket Amazon S3 Anda. Menggunakan URL yang telah ditetapkan sebelumnya akan memungkinkan unggahan tanpa mengharuskan pihak lain memiliki kredensil atau izin AWS keamanan. URL yang telah ditandatangani sebelumnya dibatasi oleh izin pengguna yang membuatnya. Artinya, jika Anda menerima URL yang telah ditandatangani sebelumnya untuk mengunggah suatu objek, Anda dapat mengunggah objek hanya jika pembuat URL tersebut memiliki izin yang diperlukan untuk mengunggah objek tersebut.

Saat seseorang menggunakan URL untuk mengunggah sebuah objek, Amazon S3 membuat objek dalam bucket yang ditentukan. Jika objek dengan kunci yang sama yang ditentukan dalam URL yang telah ditandatangani sebelumnya sudah ada di bucket, Amazon S3 akan menggantikan objek yang ada dengan objek yang diunggah. Setelah diunggah, pemilik bucket akan memiliki objek tersebut.

Untuk informasi umum tentang presigned URLs, lihat[Unduh dan unggah objek dengan presigned URLs](using-presigned-url.md).

Anda dapat membuat URL yang telah ditandatangani sebelumnya untuk mengunggah objek tanpa menulis kode apa pun dengan menggunakan AWS Explorer for Visual Studio. Anda juga dapat membuat URL presigned secara terprogram dengan menggunakan. AWS SDKs

**catatan**  
Saat ini, AWS Toolkit for Visual Studio tidak mendukung Visual Studio untuk Mac.

## Menggunakan AWS Toolkit for Visual Studio (Windows)
<a name="upload-object-presignedurl-vsexplorer"></a>

1. Instal AWS Toolkit for Visual Studio menggunakan petunjuk berikut, [Menginstal dan menyiapkan Toolkit for Visual](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/setup.html) Studio di *AWS Toolkit for Visual Studio Panduan Pengguna*.

1. Connect untuk AWS menggunakan langkah-langkah berikut, [Connecting to AWS](https://docs.aws.amazon.com/AWSToolkitVS/latest/UserGuide/connect.html) di *Panduan AWS Toolkit for Visual Studio Pengguna*.

1. Di panel sisi kiri berlabel **AWS Explorer**, klik kanan bucket yang ingin Anda unggah objek.

1. Pilih **Buat URL Pra-Tanda Tandatangani**... .

1. Di jendela pop-up, atur tanggal kedaluwarsa dan waktu untuk URL yang telah ditetapkan sebelumnya.

1. Untuk **Object Key**, atur nama file yang akan diunggah. File yang Anda unggah harus sama persis dengan nama ini. Jika objek dengan kunci objek yang sama sudah ada di bucket, Amazon S3 akan mengganti objek yang ada dengan objek yang baru diunggah. 

1. Pilih **PUT** untuk menentukan bahwa URL yang telah ditandatangani sebelumnya ini akan digunakan untuk mengunggah objek.

1. Pilih tombol **Hasilkan**.

1. Untuk menyalin URL ke clipboard, pilih **Salin**.

1. Untuk menggunakan URL ini, Anda dapat mengirim permintaan PUT dengan perintah `curl`. Sertakan path lengkap ke file Anda dan URL presigned itu sendiri. 

   ```
   curl -X PUT -T "/path/to/file" "presigned URL"
   ```

## Menggunakan AWS SDKs untuk menghasilkan URL yang `PUT` telah ditetapkan sebelumnya untuk mengunggah file
<a name="presigned-urls-upload-sdk"></a>

 Anda dapat membuat URL presigned yang dapat melakukan tindakan S3 untuk waktu yang terbatas. 

**catatan**  
Jika Anda menggunakan AWS CLI atau AWS SDKs, waktu kedaluwarsa untuk presigned URLs dapat diatur setinggi 7 hari. Untuk informasi selengkapnya, lihat [Waktu kedaluwarsa untuk presigned](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-presigned-url.html#PresignedUrl-Expiration). URLs

------
#### [ Python ]

 Skrip Python berikut menghasilkan URL yang `PUT` telah ditetapkan sebelumnya untuk mengunggah objek ke bucket tujuan umum S3. 

1. Salin isi skrip dan simpan sebagai file “*put-only-url.py*”. Untuk menggunakan contoh berikut, ganti *user input placeholders* dengan informasi Anda sendiri (seperti nama file Anda). 

   ```
   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.",
       )
       parser.add_argument(
           "--region", help="The AWS region where the bucket is located.", default="us-east-1"
       )
       parser.add_argument(
           "--content-type", help="The content type of the file to upload.", default="application/octet-stream"
       )
       args = parser.parse_args()
       
       # Create S3 client with explicit region configuration
       s3_client = boto3.client("s3", region_name=args.region)
       
       # Optionally set signature version if needed for older S3 regions
       # s3_client.meta.config.signature_version = 's3v4'
       
       # The presigned URL is specified to expire in 1000 seconds
       url = generate_presigned_url(
           s3_client, 
           "put_object", 
           {
               "Bucket": args.bucket, 
               "Key": args.key,
               "ContentType": args.content_type  # Specify content type
           }, 
           1000
       )
       print(f"Generated PUT presigned URL: {url}")
   
   if __name__ == "__main__":
       main()
   ```

1. Untuk menghasilkan URL yang `PUT` telah ditetapkan sebelumnya untuk mengunggah file, jalankan skrip berikut dengan nama bucket dan jalur objek yang diinginkan. 

    Perintah berikut menggunakan nilai contoh. Ganti *user input placeholders* dengan informasi Anda sendiri.

   ```
   python put-only-url.py amzn-s3-demo-bucket <object-path> --region us-east-1 --content-type application/octet-stream
   ```

   Skrip akan menampilkan URL yang `PUT` telah ditentukan sebelumnya:

   ```
   Generated PUT presigned URL: https://amzn-s3-demo-bucket.s3.amazonaws.com/object.txt?AWS AccessKeyId=AKIAIOSFODNN7EXAMPLE&Signature=vjbyNxybdZaMmLa%2ByT372YEAiv4%3D&Expires=1741978496
   ```

1. Anda sekarang dapat mengunggah file menggunakan URL presigned yang dihasilkan dengan curl. Pastikan untuk menyertakan jenis konten yang sama yang digunakan saat membuat URL:

   ```
   curl -X PUT -T "path/to/your/local/file" -H "Content-Type: application/octet-stream" "generated-presigned-url"
   ```

   Jika Anda menentukan jenis konten yang berbeda saat membuat URL, pastikan untuk menggunakan jenis konten yang sama dalam perintah curl.

Untuk lebih banyak contoh penggunaan AWS SDKs untuk menghasilkan URL yang telah ditetapkan sebelumnya untuk mengunggah objek, lihat [Membuat URL yang telah ditetapkan sebelumnya untuk Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/API/s3_example_s3_Scenario_PresignedUrl_section.html) menggunakan SDK. AWS 

**Kesalahan pemecahan masalah SignatureDoesNotMatch**  
Jika Anda mengalami `SignatureDoesNotMatch` kesalahan saat menggunakan presigned URLs, periksa hal berikut:  
Verifikasi waktu sistem Anda disinkronkan dengan server waktu yang andal
Pastikan Anda menggunakan URL persis seperti yang dihasilkan, tanpa modifikasi apa pun
Periksa apakah URL telah kedaluwarsa dan buat yang baru jika diperlukan
Pastikan jenis konten dalam permintaan upload Anda cocok dengan jenis konten yang ditentukan saat membuat URL
Konfirmasikan bahwa Anda menggunakan wilayah yang benar untuk bucket
Saat menggunakan curl, lampirkan URL dalam tanda kutip untuk menangani karakter khusus dengan benar

------