Saat Anda mengakses objek OSS melalui browser, objek tersebut mungkin diunduh alih-alih ditampilkan secara inline. Gunakan panduan ini untuk mendiagnosis penyebabnya dan mengonfigurasi perilaku pratinjau yang sesuai.
Pemecahan Masalah
Jika objek diunduh alih-alih dipratinjau, jalankan curl untuk memeriksa header respons dan mengidentifikasi penyebabnya.
Tujuan: Periksa apakah header respons berisi bidang yang memaksa pengunduhan.
Langkah-langkah: Jalankan perintah berikut di terminal Anda. Ganti <your-object-url> dengan URL objek Anda.
curl -I "<your object URL>"Analisis hasil: Periksa respons untuk bidang x-oss-force-download dan Content-Disposition.
Jika header respons berisi
x-oss-force-download: true: Kebijakan keamanan untuk nama domain default OSS dipicu. Untuk solusinya, lihat Skenario 1: Unduhan paksa akibat kebijakan keamanan OSS.Jika header respons tidak berisi
x-oss-force-downloadtetapi berisiContent-Disposition: attachment: Metadata objek dikonfigurasi agar diunduh sebagai lampiran. Untuk solusinya, lihat Skenario 2: Unduhan paksa akibat pengaturan metadata objek.Jika header respons tidak berisi kedua bidang tersebut tetapi objek tetap diunduh: Browser kemungkinan besar tidak dapat mengenali jenis file objek tersebut. Untuk solusinya, lihat Skenario 3: Browser gagal mempratinjau objek karena Content-Type salah.
Solusi
Skenario 1: Unduhan paksa akibat kebijakan keamanan OSS
Skenario ini terjadi ketika header respons berisi x-oss-force-download: true.
Penyebab: OSS menambahkan header
x-oss-force-download: truedanContent-Disposition: attachmentuntuk mencegah jenis file tertentu (seperti HTML) dieksekusi di browser. Kebijakan ini berlaku saat Anda mengakses objek melalui OSS default domain name atau acceleration endpoint pada bucket yang dibuat setelah tanggal tertentu.Untuk informasi lebih lanjut tentang kebijakan ini, lihat Lampiran: Referensi cepat aturan unduhan paksa OSS di akhir topik ini.
Solusi: Gunakan nama domain kustom untuk mengakses sumber daya OSS
Prosedur:
Petakan domain kustom: Masuk ke Konsol OSS. Di halaman Domain Names bucket, petakan nama domain kustom Anda yang telah memiliki Pendaftaran ICP.
Konfigurasikan rekaman CNAME: Di penyedia nama domain Anda, seperti Alibaba Cloud DNS, tambahkan Rekaman CNAME yang mengarahkan nama domain kustom Anda ke alamat CNAME yang disediakan oleh OSS.
Akses objek dengan domain baru: Akses objek melalui URL domain kustom Anda. Objek kini akan dipratinjau secara inline.
Untuk akselerasi global, petakan domain kustom Anda ke acceleration endpoint. Ini melewati kebijakan unduhan paksa sekaligus memberikan akses yang dipercepat.
Untuk instruksi detail, lihat Akses OSS melalui nama domain kustom.
Skenario 2: Unduhan paksa akibat pengaturan metadata objek
Skenario ini terjadi ketika header respons berisi Content-Disposition: attachment tetapi tidak berisi x-oss-force-download.
Penyebab: Metadata
Content-Dispositionobjek diatur keattachment, yang memaksa browser mengunduh alih-alih menampilkan objek. Jika pengaturan ini tidak dihapus setelah penggunaan sementara, semua permintaan selanjutnya akan memicu pengunduhan.Solusi: Ubah metadata
Content-Dispositionobjek menjadiinlineUbah melalui konsol
Masuk ke Konsol OSS dan buka halaman Objects di bagian Object Management bucket target.
Temukan objek target. Klik ikon ┇ di kolom Actions lalu pilih Set Object Metadata.
Pada kotak dialog yang muncul, temukan bidang
Content-Dispositiondan ubah nilainya menjadiinline.Klik OK untuk menyimpan pengaturan.
Ubah secara batch menggunakan ossutil
# Atur Content-Disposition objek tertentu menjadi inline. ossutil set-props oss://your-bucket/your-object.pdf --content-disposition inline --metadata-directive update
Skenario 3: Browser gagal mempratinjau objek karena Content-Type salah
Skenario ini terjadi ketika header respons normal, tetapi browser tetap mengunduh objek.
Penyebab:
Content-Typeobjek (jenis MIME) tidak ada atau salah. Misalnya, gambar JPG denganContent-Typediatur keapplication/octet-streamakan diunduh karena browser tidak dapat mengenali jenis file tersebut.Solusi: Atur
Content-Typeyang benar untuk objekUbah melalui konsol
Masuk ke Konsol OSS dan buka halaman Objects di bagian Object Management bucket target.
Temukan objek target. Klik ikon ┇ di kolom Actions lalu pilih Set Object Metadata.
Pada kotak dialog yang muncul, temukan bidang
Content-Typedan ubah nilainya menjadi nilai yang benar.Klik OK untuk menyimpan pengaturan.
Contoh Content-Type yang benar untuk jenis file umum:
Gambar:
image/jpeg,image/png,image/gif,image/webpVideo:
video/mp4Dokumen PDF:
application/pdfFile HTML:
text/htmlTeks biasa:
text/plain
Ubah secara batch menggunakan ossutil
# Atur Content-Type objek tertentu menjadi image/jpeg. ossutil set-props oss://your-bucket/your-object.jpg --content-type image/jpeg --metadata-directive updateUbah dengan menggunakan SDK
CopyObjectSaat Anda menggunakan
CopyObjectuntuk menyalin objek, direktif metadataCOPYdigunakan secara default. Direktif ini menyalin metadata objek sumber ke objek tujuan apa adanya dan tidak secara otomatis menginferensi atau memperbaruiContent-Typeberdasarkan ekstensi nama file objek tujuan. Dalam kasus ini, jika Anda hanya menentukanContent-Typedalam permintaan tanpa mengaturx-oss-metadata-directivekeREPLACE, pengaturan tersebut tidak berlaku, dan objek tujuan mempertahankanContent-Typeobjek sumber.Nilai valid untuk
x-oss-metadata-directive:COPY(default): menyalin metadata objek sumber dan mengabaikan metadata sepertiContent-Typeyang ditentukan dalam permintaan.REPLACE: mengganti metadata objek sumber dengan metadata yang ditentukan dalam permintaan.
Saat memanggil
CopyObject, Anda harus menentukanContent-Typedanx-oss-metadata-directive: REPLACEuntuk memperbaruiContent-Typeobjek tujuan ke nilai yang ditentukan. Contoh kode berikut menggunakan Python SDK:import oss2 # Inisialisasi bucket. auth = oss2.Auth('<your-access-key-id>', '<your-access-key-secret>') bucket = oss2.Bucket(auth, '<your-endpoint>', '<your-bucket-name>') # Atur Content-Type dan tetapkan direktif metadata ke REPLACE saat menyalin objek. headers = { "Content-Type": "image/jpeg", "x-oss-metadata-directive": "REPLACE" } bucket.copy_object('<source-bucket-name>', 'source-object.png', 'target-object.jpg', headers=headers)Sebagai alternatif, Anda dapat menggunakan metode
update_object_metauntuk langsung memperbaruiContent-Typeobjek yang sudah ada, atau tentukanContent-Typesaat mengunggah objek menggunakanput_object.
Skenario 4: Pratinjau gagal karena kebijakan bucket memaksakan HTTPS
Skenario ini terjadi ketika permintaan melalui HTTP mengembalikan error 403 AccessDenied dengan pesan Access denied by bucket policy. Objek tidak dipratinjau maupun diunduh, sedangkan objek yang sama dikembalikan sesuai harapan saat diminta melalui HTTPS.
Penyebab: Kebijakan bucket berisi kondisi
acs:SecureTransport, yang menolak permintaan yang tidak dikirim melalui HTTPS. Permintaan HTTP untuk URL objek ditolak oleh kebijakan bucket sebelum objek dikembalikan, sehingga browser tidak memiliki apa pun untuk dipratinjau. Permintaan yang menggunakan nama domain kustom tunduk pada kebijakan bucket yang sama seperti permintaan yang menggunakan nama domain default OSS.Konfirmasi penyebab:
Masuk ke Konsol OSS. Klik bucket target. Di panel navigasi kiri, klik
Periksa apakah daftar kebijakan berisi kebijakan yang Condition-nya membatasi metode akses ke HTTP dan Effect-nya adalah Deny.
Atau, kueri kebijakan bucket dari command line:
aliyun ossutil api get-bucket-policy --bucket <bucket-name>
Solusi 1 (Direkomendasikan): Akses objek melalui HTTPS. Ganti
http://denganhttps://pada URL objek dan minta objek tersebut lagi. Objek kemudian akan dipratinjau di browser, dan bucket tetap menolak permintaan HTTP.Solusi 2: Ubah kebijakan bucket. Jika bisnis Anda memerlukan akses HTTP, di panel navigasi kiri, klik , hapus atau ubah kebijakan yang berisi kondisi
acs:SecureTransport. Mengizinkan permintaan HTTP berarti data ditransmisikan dalam teks biasa, yang mengurangi keamanan transmisi. Evaluasi dampaknya sebelum mengubah kebijakan.
Kasus Penggunaan dan Solusi Tambahan
Perubahan metadata tidak berlaku: Periksa cache CDN
Jika Anda menggunakan CDN untuk mempercepat akses ke OSS, perubahan metadata seperti Content-Type atau Content-Disposition mungkin tidak langsung berlaku karena node CDN masih menyajikan versi yang di-cache.
Solusi: Bersihkan cache CDN untuk URL file yang dimodifikasi di Konsol CDN. Refresh dan prefetch resources.
Bagaimana cara memaksa objek diunduh alih-alih dipratinjau?
Untuk selalu memaksa pengunduhan saat pengguna mengakses file, gunakan salah satu metode berikut.
Metode 1 (Direkomendasikan): Konfigurasi di OSS. Atur metadata
Content-Dispositionfile keattachmentseperti yang dijelaskan di Skenario 2. Paling cocok untuk pengaturan permanen per file.Metode 2: Konfigurasi di CDN. Tambahkan
Content-Disposition: attachmentsebagai header respons outbound di bawah Cache di Konsol CDN. Ini menghindari modifikasi file sumber dan mendukung konfigurasi batch berdasarkan path atau jenis file.
Browser tidak mendukung format file untuk pratinjau
Browser tidak dapat mempratinjau format profesional tertentu seperti .psd, .ai, dan .sketch. File-file ini diunduh terlepas dari konfigurasi OSS dan CDN.
Solusi: Pasang ekstensi browser untuk format tersebut, atau gunakan layanan pratinjau dokumen seperti WebOffice Online Preview.
Lampiran: Referensi cepat aturan unduhan paksa OSS
Periksa nilai x-oss-ec di header respons, lalu gunakan tabel berikut untuk mengidentifikasi aturan yang sesuai.
Kode error (x-oss-ec): Mengidentifikasi aturan yang memicu pengunduhan.
Waktu pembuatan bucket: Kebijakan biasanya hanya berlaku untuk bucket yang dibuat setelah waktu ini. Bucket lama biasanya tidak terpengaruh.
Waktu pengaktifan akselerasi transfer: Kebijakan biasanya hanya berlaku untuk bucket dengan akselerasi transfer yang diaktifkan setelah waktu ini. Bucket dengan akselerasi transfer yang diaktifkan lebih awal biasanya tidak terpengaruh.
Anda dapat melewati semua aturan unduhan paksa dengan menggunakan nama domain kustom.
Nama domain default OSS
Kapan kebijakan berlaku | Wilayah | Sumber daya yang terpengaruh | Jenis file yang terpengaruh | Kode error |
08:00, 28 September 2018 | China (Hangzhou), China (Shanghai), China (Qingdao), China (Beijing), China (Zhangjiakou), China (Hohhot), China (Shenzhen), China (Chengdu) | Bucket yang dibuat setelah kebijakan berlaku | text/html | |
12:00, 25 September 2019 | China (Nanjing - Local Region - Phasing Out) China (Ulanqab), China (Heyuan), China (Guangzhou), US (Silicon Valley), US (Virginia), Korea Selatan (Seoul), Singapura, Malaysia (Kuala Lumpur), Indonesia (Jakarta), Filipina (Manila), Thailand (Bangkok), UK (London), UEA (Dubai) | Bucket yang dibuat setelah kebijakan berlaku | text/html | |
14:00, 25 November 2019 | China (Hong Kong) | Bucket yang dibuat setelah kebijakan berlaku | text/html | |
17:00, 23 September 2019 | China (Hohhot) | Bucket yang dibuat setelah kebijakan berlaku | image/jpeg, image/gif, image/tiff, image/png, image/webp, image/svg+xml, image/bmp, image/x-ms-bmp, image/x-cmu-raster, image/exr, image/x-icon, image/heic, text/html | |
11:00, 24 September 2019 | China (Qingdao), China (Chengdu) | Bucket yang dibuat setelah kebijakan berlaku | image/jpeg, image/gif, image/tiff, image/png, image/webp, image/svg+xml, image/bmp, image/x-ms-bmp, image/x-cmu-raster, image/exr, image/x-icon, image/heic, text/html | |
17:00, 24 September 2019 | China (Zhangjiakou) | Bucket yang dibuat setelah kebijakan berlaku | image/jpeg, image/gif, image/tiff, image/png, image/webp, image/svg+xml, image/bmp, image/x-ms-bmp, image/x-cmu-raster, image/exr, image/x-icon, image/heic, text/html | |
17:00, 29 September 2019 | China (Shanghai), China (Shenzhen) | Bucket yang dibuat setelah kebijakan berlaku | image/jpeg, image/gif, image/tiff, image/png, image/webp, image/svg+xml, image/bmp, image/x-ms-bmp, image/x-cmu-raster, image/exr, image/x-icon, image/heic, text/html | |
18:00, 29 September 2019 | China (Beijing) | Bucket yang dibuat setelah kebijakan berlaku | image/jpeg, image/gif, image/tiff, image/png, image/webp, image/svg+xml, image/bmp, image/x-ms-bmp, image/x-cmu-raster, image/exr, image/x-icon, image/heic, text/html | |
15:00, 30 September 2019 | China (Hangzhou) | Bucket yang dibuat setelah kebijakan berlaku | image/jpeg, image/gif, image/tiff, image/png, image/webp, image/svg+xml, image/bmp, image/x-ms-bmp, image/x-cmu-raster, image/exr, image/x-icon, image/heic, text/html | |
00:00, 09 Oktober 2022 | Bucket yang dibuat oleh pengguna yang pertama kali mengaktifkan OSS setelah pukul 00:00 pada 9 Oktober 2022 | |||
10:00, 22 Desember 2025 | China (Ulanqab), China (Heyuan), China (Guangzhou), China (Nanjing - Local Region - Phasing Out) | Bucket yang dibuat setelah kebijakan berlaku | image/jpeg, image/gif, image/tiff, image/png, image/webp, image/svg+xml, image/bmp, image/x-ms-bmp, image/x-cmu-raster, image/exr, image/x-icon, image/heic |
Titik akhir percepatan
Waktu berlaku | Wilayah | Sumber daya yang terpengaruh | Jenis file yang terpengaruh | Kode error |
00:00, 31 Desember 2020 | Bucket yang diaktifkan akselerasi transfer setelah kebijakan berlaku | text/html | ||
12:00, 07 Januari 2021 | UEA (Dubai) | Bucket yang diaktifkan akselerasi transfer setelah kebijakan berlaku | ||
18:00, 07 Januari 2021 | Malaysia (Kuala Lumpur), UK (London) | Bucket yang diaktifkan akselerasi transfer setelah kebijakan berlaku | ||
18:00, 08 Januari 2021 | Jepang (Tokyo), Indonesia (Jakarta), Jerman (Frankfurt) | Bucket yang diaktifkan akselerasi transfer setelah kebijakan berlaku | ||
12:00, 14 Januari 2021 | US (Silicon Valley), US (Virginia), Singapura | Bucket yang diaktifkan akselerasi transfer setelah kebijakan berlaku | ||
00:00, 16 Januari 2021 | China (Hong Kong) | Bucket yang diaktifkan akselerasi transfer setelah kebijakan berlaku | ||
00:00, 09 Oktober 2022 | Bucket yang dibuat oleh pengguna yang pertama kali mengaktifkan OSS setelah pukul 00:00 pada 9 Oktober 2022 | |||
00:00, 01 Februari 2023 | Korea Selatan (Seoul), Filipina (Manila), Thailand (Bangkok) | Bucket yang diaktifkan akselerasi transfer setelah kebijakan berlaku |