全部产品
Search
文档中心

Object Storage Service:Menggunakan URL yang ditandatangani sebelumnya untuk mengunduh atau melihat pratinjau file

更新时间:Mar 21, 2026

Secara default, objek OSS bersifat privat. Hasilkan URL yang ditandatangani sebelumnya (presigned URL) untuk memberikan akses sementara kepada pihak ketiga guna mengunduh atau melihat pratinjau file tertentu—tanpa memerlukan akun atau izin di sisi mereka. URL tersebut menyertakan signature tersemat dan kedaluwarsa setelah periode validitas yang Anda tetapkan saat pembuatan.

image

Cara kerja

Pembuatan presigned URL menggunakan enkripsi berbasis AccessKey dan penggabungan parameter kueri:

  1. Pemeriksaan izin — Pemanggil harus memiliki izin oss:GetObject untuk objek target.

  2. Signature lokal — Menggunakan ID AccessKey dan AccessKey Secret Anda, OSS mengenkripsi path objek, waktu kedaluwarsa, dan parameter terkait untuk menghasilkan signature (x-oss-signature).

  3. Penambahan parameter — Parameter signature (x-oss-date, x-oss-expires, x-oss-credential, x-oss-signature-version, x-oss-signature) ditambahkan ke URL objek sebagai string kueri.

  4. Perakitan URL — Hasilnya adalah presigned URL lengkap.

Format URL:

https://<BucketName>.<Endpoint>/<ObjectName>?<signature parameters>

Contoh:

https://examplebucket.oss-cn-hangzhou.aliyuncs.com/exampleobject.txt?x-oss-process=image%2Fresize%2Cp_10&x-oss-date=20241115T095058Z&x-oss-expires=3600&x-oss-signature-version=OSS4-HMAC-SHA256&x-oss-credential=LTAI****************%2F20241115%2Fcn-hangzhou%2Foss%2Faliyun_v4_request&x-oss-signature=6e7a*********************************

Untuk spesifikasi signature lengkap, lihat Signature Version 4 (direkomendasikan).

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

Dapatkan tautan unduh

Hasilkan presigned URL menggunakan endpoint default OSS. Pihak ketiga dapat menggunakan URL ini untuk mengunduh file secara langsung.

Konsol Manajemen OSS

Di Konsol Manajemen OSS, buka daftar Files bucket target, klik file target, lalu klik Copy File URL di panel detail di sebelah kanan. URL yang dihasilkan memiliki periode validitas default selama 32.400 detik (9 jam).

SDK

Semua contoh SDK di bawah ini menggunakan Signature Version 4, yang diterapkan secara default oleh OSS SDK 2.0. Kredensial dimuat dari variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.

Java

import argparse
import alibabacloud_oss_v2 as oss

parser = argparse.ArgumentParser(description="contoh presign untuk mengambil objek")
parser.add_argument('--region', required=True)
parser.add_argument('--bucket', required=True)
parser.add_argument('--endpoint')
parser.add_argument('--key', required=True)

def main():
    args = parser.parse_args()
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = args.region
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    client = oss.Client(cfg)
    pre_result = client.presign(
        oss.GetObjectRequest(
            bucket=args.bucket,
            key=args.key,
        )
    )
    print(f'method: {pre_result.method},'
          f' expiration: {pre_result.expiration.strftime("%Y-%m-%dT%H:%M:%S.000Z")},'
          f' url: {pre_result.url}')
    for key, value in pre_result.signed_headers.items():
        print(f'signed headers key: {key}, signed headers value: {value}')

if __name__ == "__main__":
    main()

Untuk informasi lebih lanjut, lihat Unduh file menggunakan presigned URL di Java.

Python

import argparse
import alibabacloud_oss_v2 as oss

parser = argparse.ArgumentParser(description="presign get object sample")
parser.add_argument('--region', required=True)
parser.add_argument('--bucket', required=True)
parser.add_argument('--endpoint')
parser.add_argument('--key', required=True)

def main():
    args = parser.parse_args()
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = args.region
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    client = oss.Client(cfg)
    pre_result = client.presign(
        oss.GetObjectRequest(
            bucket=args.bucket,
            key=args.key,
        )
    )
    print(f'method: {pre_result.method},'
          f' expiration: {pre_result.expiration.strftime("%Y-%m-%dT%H:%M:%S.000Z")},'
          f' url: {pre_result.url}')
    for key, value in pre_result.signed_headers.items():
        print(f'signed headers key: {key}, signed headers value: {value}')

if __name__ == "__main__":
    main()

Untuk informasi lebih lanjut, lihat Unduh file menggunakan presigned URL di Python.

Go

package main

import (
    "context"
    "flag"
    "log"
    "time"

    "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
    "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
    region     string
    bucketName string
    objectName string
)

func init() {
    flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
    flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
    flag.StringVar(&objectName, "object", "", "Nama objek.")
}

func main() {
    flag.Parse()
    if len(bucketName) == 0 || len(region) == 0 || len(objectName) == 0 {
        flag.PrintDefaults()
        log.Fatalf("parameter tidak valid: region, bucket, dan object wajib diisi")
    }

    cfg := oss.LoadDefaultConfig().
        WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
        WithRegion(region)

    client := oss.NewClient(cfg)

    result, err := client.Presign(context.TODO(), &oss.GetObjectRequest{
        Bucket: oss.Ptr(bucketName),
        Key:    oss.Ptr(objectName),
    },
        oss.PresignExpires(10*time.Minute),
    )
    if err != nil {
        log.Fatalf("gagal membuat presigned URL: %v", err)
    }

    log.Printf("method: %v", result.Method)
    log.Printf("expiration: %v", result.Expiration)
    log.Printf("url: %v", result.URL)
}

Untuk informasi lebih lanjut, lihat Unduh file menggunakan presigned URL di Go.

Node.js

const OSS = require("ali-oss");

async function generateSignatureUrl(fileName) {
    const client = await new OSS({
        accessKeyId: process.env.OSS_ACCESS_KEY_ID,
        accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
        bucket: 'examplebucket',
        region: 'oss-cn-hangzhou',
        // Gunakan HTTPS untuk mencegah browser memblokir tautan unduhan.
        secure: true,
        authorizationV4: true
    });

    return await client.signatureUrlV4('GET', 3600, {
        headers: {}
    }, fileName);
}

generateSignatureUrl('yourFileName').then(url => {
    console.log('Generated URL:', url);
}).catch(err => {
    console.error('Error:', err);
});

Untuk informasi lebih lanjut, lihat Unduh file menggunakan presigned URL di Node.js.

PHP

<?php

require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

$optsdesc = [
    "region"   => ['help' => 'Wilayah tempat bucket berada.', 'required' => true],
    "endpoint" => ['help' => 'Endpoint OSS.', 'required' => false],
    "bucket"   => ['help' => 'Nama bucket.', 'required' => true],
    "key"      => ['help' => 'Nama objek.', 'required' => true],
];
$longopts = array_map(fn($key) => "$key:", array_keys($optsdesc));
$options = getopt("", $longopts);

foreach ($optsdesc as $key => $value) {
    if ($value['required'] && empty($options[$key])) {
        echo "Error: --$key wajib diisi. " . $value['help'] . PHP_EOL;
        exit(1);
    }
}

$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($options["region"]);
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]);
}

$client = new Oss\Client($cfg);
$request = new Oss\Models\GetObjectRequest(bucket: $options["bucket"], key: $options["key"]);
$result = $client->presign($request);

print('url: ' . $result->url . PHP_EOL);

Untuk informasi lebih lanjut, lihat Unduh file menggunakan presigned URL di PHP.

Bahasa lainnya: .NET | Android | iOS | C++ | Ruby | C

ossutil

Hasilkan tautan unduh dengan periode validitas default selama 15 menit:

ossutil presign oss://examplebucket/example.txt

Untuk contoh lainnya, lihat presign (hasilkan presigned URL).

ossbrowser

ossbrowser mendukung operasi tingkat objek yang sama seperti konsol. Ikuti petunjuk di layar untuk menghasilkan presigned URL. Untuk instruksi penyiapan, lihat Operasi umum.

Dapatkan tautan pratinjau online

Untuk menghasilkan presigned URL yang membuka pratinjau inline di browser alih-alih memicu unduhan, Anda harus terlebih dahulu menyambungkan nama domain kustom ke bucket Anda. Gunakan domain kustom tersebut sebagai endpoint saat menghasilkan URL.

Tanpa nama domain kustom, sebagian besar browser memperlakukan URL domain default OSS sebagai unduhan karena pembatasan keamanan.

Konsol Manajemen OSS

  1. Masuk ke Konsol Manajemen OSS.Konsol OSS

  2. Di panel navigasi kiri, klik Buckets, lalu klik bucket target.

  3. Pilih Object Management > Objects, lalu klik nama objek.

  4. Di panel View Details, pilih nama domain kustom Anda di bidang Custom domain name, lalu klik Copy Object URL.

2.png

ossbrowser

Masuk ke ossbrowser menggunakan nama domain kustom, lalu hasilkan URL dari detail objek. Untuk instruksi unduhan, lihat Alat manajemen grafis ossbrowser 1.0.

SDK (menggunakan nama domain kustom)

Teruskan nama domain kustom Anda sebagai endpoint dan aktifkan dukungan CNAME saat membuat klien OSS.

Java

// Tentukan nama domain kustom sebagai endpoint.
String endpoint = "https://static.example.com"; // Ganti dengan nama domain kustom Anda.
String region = "cn-hangzhou";
String bucketName = "examplebucket";
String objectName = "exampleobject.txt";

EnvironmentVariableCredentialsProvider credentialsProvider =
    CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();

ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSupportCname(true);   // Aktifkan CNAME
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);

OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)
        .build();

try {
    Date expiration = new Date(new Date().getTime() + 3600 * 1000L);
    GeneratePresignedUrlRequest request =
        new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.GET);
    request.setExpiration(expiration);
    URL signedUrl = ossClient.generatePresignedUrl(request);
    System.out.println("Preview URL: " + signedUrl);
} finally {
    if (ossClient != null) ossClient.shutdown();
}

Python

cfg = oss.config.load_default()
cfg.credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
cfg.region = args.region
cfg.endpoint = "http://static.example.com"  # Ganti dengan nama domain kustom Anda.
cfg.use_cname = True                         # Aktifkan CNAME

client = oss.Client(cfg)
pre_result = client.presign(
    oss.GetObjectRequest(bucket=args.bucket, key=args.key)
)
print(f'url: {pre_result.url}')

Go

cfg := oss.LoadDefaultConfig().
    WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
    WithRegion(region).
    WithEndpoint("http://static.example.com"). // Ganti dengan nama domain kustom Anda.
    WithUseCName(true)                          // Aktifkan CNAME

client := oss.NewClient(cfg)
result, err := client.Presign(context.TODO(), &oss.GetObjectRequest{
    Bucket: oss.Ptr(bucketName),
    Key:    oss.Ptr(objectName),
},
    oss.PresignExpires(10*time.Minute),
)

Node.js

const client = await new OSS({
    endpoint: 'http://static.example.com',  // Ganti dengan nama domain kustom Anda.
    accessKeyId: process.env.OSS_ACCESS_KEY_ID,
    accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
    bucket: 'examplebucket',
    region: 'oss-cn-hangzhou',
    authorizationV4: true,
    cname: true  // Aktifkan CNAME
});

PHP

$cfg->setEndpoint("http://static.example.com"); // Ganti dengan nama domain kustom Anda.
$cfg->setUseCname(true);                         // Aktifkan CNAME

ossutil (dengan nama domain kustom)

ossutil presign oss://examplebucket/exampleobject.txt \
  --endpoint "http://static.example.com" \
  --addressing-style "cname"

Untuk menghindari penentuan endpoint setiap kali, tambahkan nama domain kustom ke file konfigurasi ossutil.

Jika file tetap tidak ditampilkan pratinjaunya di browser

Periksa hal berikut:

  • Ketidaksesuaian `Content-Type` — Jika Content-Type file tidak sesuai dengan jenis aktualnya, browser akan mengunduhnya alih-alih merendernya. Verifikasi pemetaan di Cara mengatur Content-Type (MIME)?, lalu perbarui metadata jika diperlukan. Lihat Kelola metadata objek.

  • `Content-Disposition` diatur ke `attachment` — Ini memaksa unduhan terlepas dari URL. Ubah menjadi inline di metadata objek. Lihat Kelola metadata objek.

  • Cache CDN kedaluwarsa — Jika Anda menggunakan akselerasi CDN dan mengubah metadata objek, refresh cache CDN agar konfigurasi baru berlaku.

Paksa file untuk diunduh

Jika presigned URL membuka pratinjau di browser tetapi Anda memerlukannya untuk diunduh, gunakan salah satu metode berikut. Metode 1 memiliki prioritas lebih tinggi daripada Metode 2.

Metode 1: Paksa unduh untuk satu URL tertentu

Atur parameter response-content-disposition ke attachment saat menghasilkan URL. Ini hanya berlaku untuk URL tersebut.

Java

// Tambahkan ke GeneratePresignedUrlRequest sebelum menghasilkan URL.
request.getResponseHeaders().setContentDisposition("attachment");

Python

pre_result = client.presign(
    oss.GetObjectRequest(
        bucket=args.bucket,
        key=args.key,
        response_content_disposition="attachment",
    )
)

Go

result, err := client.Presign(context.TODO(), &oss.GetObjectRequest{
    Bucket:                     oss.Ptr(bucketName),
    Key:                        oss.Ptr(objectName),
    ResponseContentDisposition: oss.Ptr("attachment"),
})

Metode 2: Paksa unduh untuk semua akses (melalui metadata)

Ubah bidang Content-Disposition di metadata objek menjadi attachment. Ini berlaku untuk setiap akses file, terlepas dari URL yang digunakan.

Di Konsol Manajemen OSS, temukan file target, klik Set File Metadata di panel detail file, atur Content-Disposition ke attachment, lalu klik OK.

Alternatifnya, perbarui bidang tersebut menggunakan SDK atau ossutil. Lihat Kelola metadata file.

Untuk juga menyesuaikan nama file yang ditampilkan di dialog simpan browser, lihat Sesuaikan nama file unduhan.

Dapatkan tautan ke versi tertentu

Hasilkan presigned URL untuk versi objek tertentu di bucket yang diaktifkan fitur versioning.

Konsol Manajemen OSS

  1. Masuk ke Konsol Manajemen OSS.Konsol Manajemen OSS

  2. Buka tab Files bucket target. Di pojok kanan atas, ubah Historical Version menjadi Show.

    image

  3. Klik nama file versi target, lalu Copy URL dari halaman detail.

    image

SDK

Tambahkan ID versi ke permintaan presign:

Java

String versionId = "CAEQARiBgID8rumR2hYiIGUyOTAyZGY2MzU5MjQ5ZjlhYzQzZjNlYTAyZDE3****";
Map<String, String> queryParam = new HashMap<>();
queryParam.put("versionId", versionId);
request.setQueryParameter(queryParam);

Python

pre_result = client.presign(
    oss.GetObjectRequest(
        bucket=bucket_name,
        key=object_name,
        version_id='CAEQARiBgID8rumR2hYiIGUyOTAyZGY2MzU5MjQ5ZjlhYzQzZjNlYTAyZDE3****',
    )
)

Go

result, err := client.Presign(context.TODO(), &oss.GetObjectRequest{
    Bucket:    oss.Ptr(bucketName),
    Key:       oss.Ptr(objectName),
    VersionId: oss.Ptr("CAEQARiBgID8rumR2hYiIGUyOTAyZGY2MzU5MjQ5ZjlhYzQzZjNlYTAyZDE7****"),
},
    oss.PresignExpires(10*time.Minute),
)

Node.js

const signedUrl = await client.signatureUrlV4('GET', 3600, {
    queries: {
        "versionId": 'CAEQARiBgID8rumR2hYiIGUyOTAyZGY2MzU5MjQ5ZjlhYzQzZjNlYTAyZDE7****'
    }
}, objectName);

PHP

$versionId = "yourVersionId";
$request = new Oss\Models\GetObjectRequest(bucket: $bucket, key: $key, versionId: $versionId);

ossutil

ossutil presign oss://examplebucket/example.txt --version-id 123

Hasilkan tautan secara massal

Gunakan ossutil untuk menghasilkan presigned URL untuk beberapa objek dalam satu perintah.

# Semua objek dalam folder (validitas default: 15 menit)
ossutil presign oss://examplebucket/folder/ -r

# Hanya file .txt dalam folder
ossutil presign oss://examplebucket/folder/ -r --include "*.txt"

# Semua objek dalam bucket
ossutil presign oss://examplebucket/ -r

Untuk opsi lainnya, lihat presign (hasilkan presigned URL).

Konsol Manajemen OSS (hanya direktori saat ini)

Konsol hanya mengekspor URL untuk objek di direktori saat ini—subdirektori tidak disertakan.

  1. Pilih objek, lalu klik Export URL List.

    list

  2. Di panel konfigurasi, sesuaikan parameter sesuai kebutuhan:

    ParameterDeskripsi
    Use HTTPSHTTPS digunakan secara default. Matikan untuk menggunakan HTTP.
    Validity periodUntuk objek privat, atur periode validitas URL (60–32.400 detik).
    Custom domain nameGunakan domain kustom yang disambungkan ke bucket untuk menghasilkan URL yang kompatibel dengan pratinjau.
    Accelerate endpointGunakan endpoint akselerasi transfer untuk akses lintas wilayah atau lintas batas.
  3. Klik OK untuk mengunduh file daftar URL.

SDK (pola list + presign)

Gunakan operasi GetBucket (ListObjects) untuk mengambil nama objek, lalu hasilkan presigned URL untuk masing-masing objek.

Sesuaikan nama file unduhan

Kontrol nama file yang muncul di dialog simpan browser saat pengguna mengunduh file.

Metode 1: Atur untuk satu permintaan

Tambahkan parameter filename ke response-content-disposition di URL. Metode 1 menggantikan Metode 2.

Java

String filename = "test.txt";
request.getResponseHeaders().setContentDisposition(
    "attachment;filename=" + URLEncoder.encode(filename, "UTF-8")
);

Python

pre_result = client.presign(
    oss.GetObjectRequest(
        bucket=args.bucket,
        key=args.key,
        response_content_disposition="attachment;filename=test.txt",
    )
)

Go

result, err := client.Presign(context.TODO(), &oss.GetObjectRequest{
    Bucket:                     oss.Ptr(bucketName),
    Key:                        oss.Ptr(objectName),
    ResponseContentDisposition: oss.Ptr("attachment;filename=test.txt"),
})

Metode 2: Atur nama file default untuk semua akses (melalui metadata)

Ubah bidang Content-Disposition di metadata objek menjadi attachment; filename="yourFileName". Ini berlaku untuk setiap akses. Lihat Kelola metadata file.

Atur periode validitas

Periode validitas ditetapkan saat pembuatan dan tidak dapat diubah setelahnya. Presigned URL dapat diakses berkali-kali hingga kedaluwarsa.

Penting

Presigned URL kedaluwarsa pada waktu yang dikonfigurasi atau saat kredensial dasarnya kedaluwarsa—mana yang lebih dulu terjadi. Jika Anda menghasilkan URL dengan token temporary Layanan Token Keamanan (STS), URL tersebut menjadi tidak valid saat token kedaluwarsa, meskipun Anda menetapkan periode validitas yang lebih lama. Token STS memiliki durasi maksimum 43.200 detik (12 jam).

Batas periode validitas berdasarkan tool

Durasi validitas maksimum bergantung pada versi signature dan tool yang digunakan. Signature Version 4 direkomendasikan: mendukung hingga 7 hari dan menyediakan keamanan lebih kuat dibandingkan Versi 1.

ToolDurasi validitas maksimumCatatan
OSS SDK 2.0V4: 604.800 dtk (7 hari); V1: tak terbatas (berbasis stempel waktu)V4 secara default. Melebihi batas V4 menghasilkan error.
OSS SDK 1.0V4: 604.800 dtk (7 hari); V1: tak terbatas (berbasis stempel waktu)V1 secara default. Melebihi batas V4 tidak menghasilkan error.
ossutil 2.0V4: 604.800 dtk (7 hari); V1: tak terbatas (berbasis stempel waktu)V4 secara default. Melebihi batas V4 menghasilkan error.
ossutil 1.0V4: 604.800 dtk (7 hari); V1: tak terbatas (berbasis stempel waktu)V1 secara default. Melebihi batas V4 tidak menghasilkan error.
Konsol32.400 dtk (9 jam)Maksimum tetap.
ossbrowser 2.032.400 dtk (9 jam)Hanya V4.
ossbrowser 1.032.400 dtk (9 jam)Hanya V1.

Perbandingan versi signature:

  • V4 (direkomendasikan): Kedaluwarsa = waktu UTC saat penandatanganan + periode validitas. Maksimum 604.800 detik (7 hari). Keamanan lebih tinggi.

  • V1 (tidak direkomendasikan): Menggunakan stempel waktu UNIX untuk merepresentasikan kedaluwarsa. Batas teoretis lebih panjang, tetapi keamanan lebih rendah dan tidak lagi dipelihara.

Untuk perbedaan antara V1 dan V4, lihat Panduan peningkatan signature V1 ke signature V4.

Konsol Manajemen OSS

Di Konsol Manajemen OSS, buka daftar Files bucket target, klik file target, lalu atur periode validitas tautan di bidang Expiration Time di panel detail.

SDK

Ubah parameter kedaluwarsa dalam kode. Untuk langkah otorisasi, lihat Berikan izin khusus kepada Pengguna RAM.

Contoh berikut menetapkan periode validitas 1 jam:

Java

// Periode validitas: 1 jam
Date expiration = new Date(new Date().getTime() + 3600 * 1000L);
URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration);

Python

pre_result = client.presign(
    oss.GetObjectRequest(bucket=args.bucket, key=args.key)
)

Go

result, err := client.Presign(context.TODO(), &oss.GetObjectRequest{
    Bucket: oss.Ptr(bucketName),
    Key:    oss.Ptr(objectName),
},
    oss.PresignExpires(10*time.Minute), // Atur periode validitas
)

Node.js

// Parameter kedua menetapkan periode validitas dalam detik. Contoh: 3600 = 1 jam.
return await client.signatureUrlV4('GET', 3600, {headers: {}}, fileName);

PHP

Lihat Unduh objek menggunakan presigned URL di PHP.

Bahasa lainnya: .NET | Android | iOS | C++ | Ruby | C

ossutil

# Tetapkan periode validitas eksplisit selama 1 jam
ossutil presign oss://examplebucket/example.txt --expires-duration 1h

ossbrowser

ossbrowser mendukung operasi tingkat objek yang sama seperti konsol. Lihat Operasi umum.

Dapatkan tautan valid jangka panjang

Presigned URL selalu kedaluwarsa. Untuk menyediakan akses tanpa tanggal kedaluwarsa, gunakan salah satu pendekatan berikut:

  • Atur ACL objek ke public-read (tidak direkomendasikan) — URL berlaku permanen dan tidak memerlukan signature. Namun, objek dapat diakses publik oleh siapa pun yang memiliki URL, yang mengekspos sumber OSS dan berisiko penyalahgunaan trafik. Jika menggunakan metode ini, aktifkan Perlindungan hotlink (daftar putih Referer) untuk mengurangi—namun tidak menghilangkan—risiko tersebut. Lihat ACL Objek.

  • Gunakan CDN dengan origin bucket OSS privat (direkomendasikan) — Pertahankan objek sebagai privat di OSS dan sajikan melalui nama domain akselerasi CDN. Setelah mengaktifkan origin bucket OSS privat untuk CDN, semua sumber daya dalam bucket dapat diakses melalui domain CDN. OSS tidak pernah diekspos secara langsung, dan CDN menyediakan akselerasi serta kontrol akses. Aktifkan Perlindungan hotlink Referer dan Penandatanganan URL CDN untuk mencegah penyalahgunaan tautan.

Buat URL valid jangka panjang

Buat URL langsung dari nama domain dan path objek—tanpa perlu signature:

Jenis domainFormat URLContoh
Nama domain default OSS (jaringan publik)https://<BucketName>.<Endpoint>/<ObjectName>https://examplebucket.oss-cn-hangzhou.aliyuncs.com/example/example.jpg
Nama domain default OSS (jaringan internal, untuk Instance ECS di wilayah yang sama)https://<BucketName>.<InternalEndpoint>/<ObjectName>https://examplebucket.oss-cn-hangzhou-internal.aliyuncs.com/example/example.jpg
Nama domain kustomhttps://<YourDomainName>/<ObjectName>https://example.com/example.jpg
Nama domain akselerasi CDNhttps://<CDN domain name>/<ObjectName>http://aliyundoc.com/image_01.jpg

Keterangan:

  • <BucketName> — Nama bucket

  • <ObjectName> — Path objek lengkap (contoh: folder/example.jpg)

  • <Endpoint>titik akhir wilayah

  • <InternalEndpoint> — Titik akhir jaringan internal untuk wilayah (contoh: oss-cn-hangzhou-internal.aliyuncs.com)

  • <YourDomainName>nama domain kustom Anda

  • <CDN domain name> — Nama domain akselerasi CDN Anda

Konfigurasi HTTPS

Protokol URL bergantung pada endpoint:

  • Endpoint default OSS — HTTPS didukung secara default, tidak perlu konfigurasi tambahan.

  • Custom domain name — Selesaikan penyimpanan sertifikat sebelum mengaktifkan HTTPS.

Untuk mengontrol protokol:

  • Konsol — Pilih protokol di panel detail saat menghasilkan URL. HTTPS adalah default.

  • ossutil / SDK — Protokol mengikuti endpoint yang Anda tetapkan. Gunakan https:// di URL endpoint untuk menghasilkan tautan HTTPS.

Perbaiki teks rusak pada pratinjau file .txt

Jika karakter Tionghoa muncul sebagai teks rusak saat melihat pratinjau file .txt, file tersebut tidak memiliki deklarasi encoding yang benar. Atur Content-Type ke text/plain;charset=utf-8 di metadata objek untuk memaksa rendering UTF-8 di browser.

  1. Masuk ke Konsol Manajemen OSS.

  2. Klik Bucket List, lalu klik nama bucket target.

  3. Di panel navigasi kiri, pilih Files > File List.

  4. Di sebelah kanan objek target, pilih Set File Metadata.

  5. Di area HTTP Standard Properties, atur Content-Type ke text/plain;charset=utf-8.

  6. Klik OK.

Batasi akses berdasarkan sumber

Gunakan Perlindungan hotlink Referer untuk hanya mengizinkan situs web tertentu mengakses sumber daya OSS. Permintaan dari sumber lain akan ditolak. Misalnya, konfigurasikan daftar putih untuk hanya mengizinkan https://example.com.

Berikan akses lebih luas dengan STS

Presigned URL hanya mendukung GetObject (unduh). Untuk memberikan pihak ketiga operasi tambahan—seperti mencantumkan objek, mengunggah, atau menyalin—gunakan kredensial akses sementara Layanan Token Keamanan (STS) sebagai gantinya. Lihat Akses OSS dengan kredensial akses sementara STS.

Pemrosesan gambar

Sertakan parameter pemrosesan gambar dalam presigned URL untuk mengubah ukuran gambar, menambahkan watermark, dan lainnya. Lihat Pemrosesan gambar.

Praktik keamanan terbaik

Ikuti rekomendasi berikut untuk mengurangi risiko saat berbagi presigned URL:

  • Selalu gunakan HTTPS. Jika presigned URL dicegat melalui HTTP, penyerang dapat menggunakannya untuk mengunduh file Anda hingga kedaluwarsa. Tentukan https:// di endpoint saat menghasilkan URL.

  • Tetapkan periode validitas sesingkat mungkin yang memenuhi kebutuhan Anda. URL yang berlaku 1 jam lebih aman daripada yang berlaku 7 hari.

  • Gunakan Signature Version 4. V4 menyediakan keamanan lebih kuat daripada V1 dan merupakan default di OSS SDK 2.0 dan ossutil 2.0.

  • Jangan hasilkan URL dengan token STS berdurasi panjang. Jika URL yang dihasilkan dari token STS bocor, URL tersebut tetap valid hingga token kedaluwarsa. Pertahankan masa berlaku token STS sesingkat mungkin sesuai kebutuhan Anda.

  • Aktifkan Perlindungan hotlink Referer untuk membatasi domain mana yang dapat menggunakan URL Anda. Lihat Batasi akses berdasarkan sumber.

  • Hindari ACL public-read untuk file sensitif. Public-read menghilangkan kebutuhan signature sepenuhnya. Gunakan CDN dengan origin privat sebagai gantinya untuk akses permanen. Lihat Dapatkan tautan valid jangka panjang.

FAQ

Mengapa URL kedaluwarsa sebelum periode validitas yang dikonfigurasi?

Presigned URL kedaluwarsa pada waktu yang dikonfigurasi atau saat kredensial dasarnya kedaluwarsa—mana yang lebih dulu terjadi. Jika Anda menghasilkan URL dengan token STS, URL tersebut menjadi tidak valid saat token kedaluwarsa, meskipun Anda menetapkan periode validitas yang lebih lama. Token STS memiliki durasi maksimum 43.200 detik (12 jam). Periksa jenis kredensial yang Anda gunakan dan pastikan kredensial tersebut belum kedaluwarsa.

Mengapa saya mendapat error 403 saat mengakses URL?

Pemanggil harus memiliki izin oss:GetObject saat menghasilkan URL. Verifikasi bahwa:

  1. Pengguna RAM atau role yang menghasilkan URL memiliki izin oss:GetObject untuk objek tertentu.

  2. Tidak ada kebijakan bucket atau objek yang secara eksplisit menolak akses.

Lihat Berikan izin khusus kepada Pengguna RAM.

Mengapa saya mendapat error ketidaksesuaian signature?

Penyebab umum:

  • Jam sistem pada mesin yang menghasilkan URL tidak sinkron. Sinkronkan dengan server NTP—bahkan deviasi waktu kecil pun membatalkan signature.

  • Proxy antara klien dan OSS memodifikasi header atau parameter kueri, yang mengubah signature.

Mengapa file diunduh alih-alih ditampilkan pratinjaunya?

Perilaku browser (pratinjau vs. unduh) bergantung pada header Content-Disposition dan Content-Type:

  • Jika Content-Disposition adalah attachment, browser selalu mengunduh file. Ubah menjadi inline di metadata objek.

  • Jika Content-Type tidak sesuai dengan jenis file, browser mungkin tidak mengenalinya sebagai file yang dapat dipratinjau. Perbarui Content-Type ke jenis MIME yang benar.

  • Agar pratinjau berfungsi, URL harus menggunakan nama domain kustom (bukan endpoint default OSS), karena sebagian besar browser memblokir rendering inline dari endpoint default OSS.