Metadata objek mencakup Header HTTP standar dan metadata pengguna. Konfigurasikan Header HTTP untuk mengontrol caching, tipe konten, dan perilaku unduhan. Tambahkan metadata pengguna untuk memberi tag objek dengan pasangan kunci-nilai kustom.
Header HTTP standar
OSS menyimpan Header HTTP standar berikut untuk setiap objek yang diunggah.
Header HTTP standar
Deskripsi
Content-Type
Tipe media objek. Browser menggunakan header ini untuk menentukan cara membaca objek. Jika tidak ditentukan, OSS menetapkan nilai berdasarkan ekstensi file, atau menggunakan nilai default application/octet-stream. Untuk informasi selengkapnya, lihat Bagaimana cara mengonfigurasi header Content-Type?
Content-Encoding
Metode encoding yang diterapkan pada objek. Tetapkan header ini agar sesuai dengan encoding aktual. Jika tidak sesuai, browser mungkin gagal mengurai atau mengunduh objek. Biarkan kosong jika objek tidak di-encode. Nilai yang valid:
identity (default): Tidak ada kompresi atau encoding.
gzip: Di-encode dengan algoritma LZ77 dan CRC 32-bit.
compress: Di-encode dengan algoritma LZW.
deflate: Di-encode dengan zlib dan algoritma deflate.
Jika Anda ingin objek halaman web statis, seperti objek HTML, JavaScript, XML, dan JSON, dikompresi menjadi objek GZIP saat diakses, Anda harus membiarkan header ini kosong dan menambahkan header Accept-Encoding: gzip ke permintaan Anda.
Content-Language
Bahasa dari konten objek. Contohnya, tetapkan header ini ke zh-CN untuk konten berbahasa Tionghoa sederhana.
Content-Disposition
Mengontrol apakah browser menampilkan atau mengunduh objek. Nilai yang valid:
Content-Disposition:inline: Menampilkan objek di browser.
Content-Disposition:attachment: Mengunduh objek dengan nama aslinya.
Content-Disposition:attachment; filename="yourFileName": Mengunduh objek dengan nama file kustom.
yourFileName adalah nama file kustom, misalnya example.jpg.
Saat mengunduh objek sebagai lampiran, perhatikan hal berikut:
Catatan
Jika nama objek berisi karakter khusus seperti tanda bintang (*) atau garis miring (/), nama file yang diunduh mungkin di-escape. Misalnya, jika Anda mengunduh example*.jpg ke komputer lokal Anda, example*.jpg mungkin di-escape menjadi example_.jpg.
Untuk mencegah nama file yang berisi karakter non-ASCII menjadi rusak (garbled), lakukan URL-encoding terhadapnya. Misalnya, untuk mengunduh objek Test.txt dengan nama aslinya Test.txt, tetapkan header Content-Disposition ke attachment;filename=%E6%B5%8B%E8%AF%95.txt;filename*=UTF-8''%E6%B5%8B%E8%AF%95.txt, yang berasal dari "attachment;filename="+URLEncoder.encode("Test","UTF-8")+".txt;filename*=UTF-8''"+URLEncoder.encode("Test","UTF-8")+".txt".
Jika Cache-Control tidak diatur, OSS menghilangkan bidang ini dari header respons. Browser kemudian menerapkan kebijakan caching default-nya sendiri.
Mengontrol perilaku caching untuk objek. Nilai yang valid:
no-cache: Cache harus melakukan revalidasi dengan server origin sebelum melayani.
no-store: Objek tidak boleh di-cache.
public: Objek dapat di-cache oleh cache apa pun.
private: Objek hanya di-cache di sisi client.
max-age=<seconds>: Periode validitas cache dalam detik. Hanya tersedia di HTTP 1.1.
Expires
Waktu kedaluwarsa cache dalam UTC. Contoh: 2022-10-12T00:00:00.000Z. Jika max-age=<seconds> disertakan dalam pengaturan header Cache-Control, max-age=<seconds> memiliki prioritas lebih tinggi daripada nilai Expires.
Konsol OSS mengonversi UTC ke zona waktu lokal Anda. Misalnya, objek yang terakhir diperbarui pada pukul 13:31:54 UTC tanggal 28 Februari 2024 akan ditampilkan sebagai pukul 21:31:54 di zona waktu UTC+8.
Content-Length
Ukuran objek. Satuan: byte.
Metadata pengguna
Tambahkan metadata pengguna saat mengunggah objek untuk mengidentifikasi tujuan atau atributnya.
Sebuah objek mendukung beberapa header metadata pengguna hingga total 8 KB.
Header metadata pengguna berupa pasangan kunci-nilai. Setiap nama header harus diawali dengan x-oss-meta-. Misalnya, x-oss-meta-last-modified:20210506 menunjukkan bahwa file lokal terakhir dimodifikasi pada 6 Mei 2021.
Operasi GetObject dan HeadObject mengembalikan metadata pengguna sebagai Header HTTP.
Prosedur
Gunakan Konsol OSS
Konsol OSS mendukung konfigurasi metadata untuk maksimal 100 objek sekaligus.
Di panel navigasi sebelah kiri, klik Buckets. Pada halaman yang muncul, klik nama bucket target.
Di panel navigasi kiri, pilih Object Management > Objects.
Konfigurasikan Header HTTP standar dan metadata pengguna.
Konfigurasi Header HTTP untuk beberapa objek sekaligus
Pilih objek yang ingin Anda konfigurasikan metadatanya, lalu klik Set Object Metadata.
Konfigurasi Header HTTP untuk satu objek
Temukan objek dalam daftar objek, lalu pilih > Set Object Metadata.
Klik OK.
OSS tidak mendukung pewarisan Cache-Control default tingkat bucket. Anda tidak dapat mengonfigurasi nilai Cache-Control terpadu untuk sebuah bucket dan membuat nilai tersebut secara otomatis diwariskan oleh objek yang diunggah nanti. Untuk mengonfigurasi header Cache-Control secara batch untuk objek yang sudah ada, Anda juga dapat menggunakan ossutil:
ossbrowser mendukung operasi tingkat objek yang sama dengan Konsol OSS. Untuk informasi selengkapnya, lihat 常用操作.
Gunakan SDK OSS
Kode berikut menunjukkan cara mengonfigurasi metadata objek dengan SDK OSS. Untuk SDK dalam bahasa lain, lihat 简介.
// Dalam contoh ini, digunakan titik akhir wilayah China (Hangzhou). Tentukan titik akhir aktual Anda.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Tentukan nama bucket. Contoh: examplebucket.
String bucketName = "examplebucket";
// Tentukan path lengkap objek. Jangan sertakan nama bucket dalam path lengkap. Contoh: testfolder/exampleobject.txt.
String objectName = "testfolder/exampleobject.txt";
String content = "Hello OSS";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
String region = "cn-hangzhou";
// Buat instans OSSClient.
// Panggil metode shutdown untuk melepas sumber daya terkait saat OSSClient tidak lagi digunakan.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Tambahkan metadata untuk objek yang diunggah.
ObjectMetadata meta = new ObjectMetadata();
String md5 = BinaryUtil.toBase64String(BinaryUtil.calculateMd5(content.getBytes()));
// Aktifkan verifikasi MD5. Setelah verifikasi MD5 diaktifkan, OSS menghitung hash MD5 dari objek yang diunggah dan membandingkan hash MD5 ini dengan yang ditentukan dalam permintaan. Jika kedua nilai berbeda, kesalahan dilaporkan.
meta.setContentMD5(md5);
// Tentukan tipe konten yang akan diunggah. Browser menentukan format dan tipe encoding yang digunakan untuk membaca objek berdasarkan tipe konten objek. Jika tipe konten tidak ditentukan, tipe konten dibuat berdasarkan ekstensi nama objek. Jika tidak tersedia ekstensi, nilai default application/octet-stream digunakan sebagai tipe konten.
meta.setContentType("text/plain; charset=utf-8");
// Konfigurasikan header. Misalnya, tentukan kelas penyimpanan untuk file yang diunggah.
meta.setHeader("x-oss-storage-class", StorageClass.Standard);
// Untuk mengaktifkan konfigurasi berikut sesuai kebutuhan, hapus komentar pada baris yang sesuai.
// Tentukan nama untuk objek saat konten diunduh.
// meta.setContentDisposition("attachment; filename=\"DownloadFilename\"");
// Tentukan panjang objek yang akan diunggah. Jika panjang objek aktual lebih besar dari panjang yang ditentukan, objek akan dipotong. Hanya konten dengan panjang yang ditentukan yang diunggah. Jika panjang objek aktual lebih kecil dari panjang yang ditentukan, seluruh konten objek diunggah.
// meta.setContentLength(content.length());
// Tentukan perilaku caching halaman web saat konten diunduh.
// meta.setCacheControl("Download Action");
// Tentukan waktu kedaluwarsa cache dalam UTC.
// meta.setExpirationTime(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z"));
// Tentukan format encoding konten saat konten diunduh.
// meta.setContentEncoding("gzip");
// Unggah objek.
ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content.getBytes()), meta);
} catch (OSSException oe) {
System.out.println("Terjadi OSSException, yang berarti permintaan Anda sampai ke OSS, "
+ "tetapi ditolak dengan tanggapan kesalahan karena suatu alasan.");
System.out.println("Pesan Kesalahan:" + oe.getErrorMessage());
System.out.println("Kode Kesalahan:" + oe.getErrorCode());
System.out.println("ID Permintaan:" + oe.getRequestId());
System.out.println("ID Host:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Terjadi ClientException, yang berarti klien mengalami "
+ "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
+ "seperti tidak dapat mengakses jaringan.");
System.out.println("Pesan Kesalahan:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\CoreOssException;
// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
$provider = new EnvironmentVariableCredentialsProvider();
// Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = "yourEndpoint";
// Tentukan nama bucket. Contoh: examplebucket.
$bucket= "examplebucket";
// Tentukan path lengkap objek. Jangan sertakan nama bucket dalam path lengkap. Contoh: exampledir/exampleobject.txt.
$object = "exampledir/exampleobject.txt";
$content = file_get_contents(__FILE__);
$options = array(
OssClient::OSS_HEADERS => array(
'Expires' => '2012-10-01 08:00:00',
'Content-Disposition' => 'attachment; filename="xxxxxx"',
'x-oss-meta-self-define-title' => 'user define meta info',
));
try{
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$ossClient = new OssClient($config);
// Konfigurasikan metadata objek saat Anda mengunggah objek.
$ossClient->putObject($bucket, $object, $content, $options);
} catch(OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK" . "\n");
const OSS = require('ali-oss');
const path = require('path');
const client = new OSS({
// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
// Atur yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi oss-cn-hangzhou.
region: 'oss-cn-hangzhou',
// Gunakan Signature V4.
authorizationV4: true,
// Atur yourBucketName ke nama bucket.
bucket: 'yourBucketName',
// Atur yourEndpoint ke titik akhir Internet wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com.
endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
});
async function put() {
try {
// Atur metadata sebagai properti meta dari objek options.
let result = await client.put('object-name', path.normalize('D:\\localpath\\examplefile.txt'), {
meta: {
year: '2025', // Nilai metadata harus berupa string.
people: 'mary'
}
});
console.log(result);
} catch (e) {
console.log(e);
}
}
put();
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Dapatkan kredensial akses dari variabel lingkungan. Sebelum Anda menjalankan kode sampel, pastikan bahwa variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Tentukan ID wilayah yang memetakan ke titik akhir. Contoh: cn-hangzhou. Parameter ini diperlukan jika Anda menggunakan algoritma tanda tangan V4.
region = "cn-hangzhou"
# Tentukan nama bucket Anda.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# Tentukan jalur lengkap objek. Contoh: exampledir/exampleobject.txt. Jangan sertakan nama bucket di jalur lengkap.
object_name = 'exampledir/exampleobject.txt'
# Tentukan string yang ingin Anda unggah.
content = '{"age": 1}'
# Konfigurasikan header HTTP. Misalnya, atur header Content-Type ke 'application/json; charset=utf-8'.
bucket.put_object(object_name, content, headers={'Content-Type': 'application/json; charset=utf-8'})
using Aliyun.OSS;
using Aliyun.OSS.Common;
using Aliyun.OSS.Util;
// Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com.
var endpoint = "yourEndpoint";
// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Tentukan nama bucket.
var bucketName = "examplebucket";
// Tentukan path lengkap objek. Jangan sertakan nama bucket dalam path lengkap.
var objectName = "exampleobject.txt";
// Tentukan path lengkap objek lokal yang ingin Anda unggah. Secara default, jika Anda tidak menentukan path lengkap objek lokal, objek lokal diunggah dari path proyek tempat program contoh berada.
var localFilename = "D:\\localpath\\examplefile.txt";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
const string region = "cn-hangzhou";
// Buat instans ClientConfiguration dan ubah parameter default sesuai kebutuhan Anda.
var conf = new ClientConfiguration();
// Gunakan algoritma signature V4.
conf.SignatureVersion = SignatureVersion.V4;
// Buat instans OSSClient.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
using (var fs = File.Open(localFilename, FileMode.Open))
{
// Buat metadata untuk objek. Anda dapat mengonfigurasi header HTTP untuk objek.
var metadata = new ObjectMetadata()
{
// Tentukan tipe konten objek.
ContentType = "text/html",
// Tentukan waktu kedaluwarsa cache dalam UTC.
ExpirationTime = DateTime.Parse("2025-10-12T00:00:00.000Z"),
};
// Tentukan panjang konten objek yang akan diunggah. Jika panjang objek aktual lebih besar dari panjang yang ditentukan, objek akan dipotong. Hanya konten dengan panjang yang ditentukan yang diunggah. Jika panjang objek aktual lebih kecil dari panjang yang ditentukan, seluruh konten objek diunggah.
metadata.ContentLength = fs.Length;
// Tentukan perilaku caching halaman web saat objek diunduh.
metadata.CacheControl = "No-Cache";
// Atur mykey1 menjadi myval1.
metadata.UserMetadata.Add("mykey1", "myval1");
// Atur mykey2 menjadi myval2.
metadata.UserMetadata.Add("mykey2", "myval2");
var saveAsFilename = "Filetest123.txt";
var contentDisposition = string.Format("attachment;filename*=utf-8''{0}", HttpUtils.EncodeUri(saveAsFilename, "utf-8"));
// Tentukan nama objek default saat konten yang diperlukan disimpan sebagai objek.
metadata.ContentDisposition = contentDisposition;
// Unggah objek dan konfigurasikan metadata objek.
client.PutObject(bucketName, objectName, fs, metadata);
Console.WriteLine("Put object succeeded");
// Kueri metadata objek.
var oldMeta = client.GetObjectMetadata(bucketName, objectName);
// Konfigurasikan metadata objek baru.
var newMeta = new ObjectMetadata()
{
ContentType = "application/octet-stream",
ExpirationTime = DateTime.Parse("2035-11-11T00:00:00.000Z"),
// Tentukan format encoding konten objek saat objek diunduh.
ContentEncoding = null,
CacheControl = ""
};
// Konfigurasikan metadata pengguna.
newMeta.UserMetadata.Add("author", "oss");
newMeta.UserMetadata.Add("flag", "my-flag");
newMeta.UserMetadata.Add("mykey2", "myval2-modified-value");
// Gunakan metode ModifyObjectMeta untuk memodifikasi metadata objek.
client.ModifyObjectMeta(bucketName, objectName, newMeta);
}
}
catch (Exception ex)
{
Console.WriteLine("Put object failed, {0}", ex.Message);
}
// Buat permintaan untuk mendapatkan metadata objek secara sinkron.
// Tentukan nama bucket, seperti examplebucket, dan path lengkap objek, seperti exampledir/exampleobject.txt. Path lengkap tidak boleh berisi nama bucket.
HeadObjectRequest head = new HeadObjectRequest("examplebucket", "exampledir/exampleobject.txt");
// Dapatkan metadata objek.
OSSAsyncTask task = oss.asyncHeadObject(head, new OSSCompletedCallback<HeadObjectRequest, HeadObjectResult>() {
@Override
public void onSuccess(HeadObjectRequest request, HeadObjectResult result) {
// Dapatkan panjang objek.
Log.d("headObject", "object Size: " + result.getMetadata().getContentLength());
// Dapatkan tipe objek.
Log.d("headObject", "object Content Type: " + result.getMetadata().getContentType());
}
@Override
public void onFailure(HeadObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
// Terjadi pengecualian permintaan.
if (clientExcepion != null) {
// Terjadi pengecualian klien, seperti kesalahan jaringan.
clientExcepion.printStackTrace();
}
if (serviceException != null) {
// Terjadi pengecualian server.
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
}
}
});
// task.waitUntilFinished(); // Tunggu hingga tugas selesai.
OSSHeadObjectRequest * request = [OSSHeadObjectRequest new];
// Tentukan nama bucket. Misalnya, examplebucket.
request.bucketName = @"examplebucket";
// Tentukan path lengkap objek. Path lengkap tidak boleh berisi nama bucket. Misalnya, exampledir/exampleobject.txt.
request.objectKey = @"exampledir/exampleobject.txt";
OSSTask * headTask = [client headObject:request];
[headTask continueWithBlock:^id(OSSTask *task) {
if (!task.error) {
NSLog(@"head object success!");
OSSHeadObjectResult * result = task.result;
NSLog(@"header fields: %@", result.httpResponseHeaderFields);
for (NSString * key in result.objectMeta) {
NSLog(@"ObjectMeta: %@ - %@", key, [result.objectMeta objectForKey:key]);
}
} else {
NSLog(@"head object failed, error: %@" ,task.error);
}
return nil;
}];
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Inisialisasi informasi akun OSS. */
/* Atur yourEndpoint ke titik akhir wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Atur yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou. */
std::string Region = "yourRegion";
/* Tentukan nama bucket. Contoh: examplebucket. */
std::string BucketName = "examplebucket";
/* Tentukan path lengkap objek. Path lengkap tidak boleh berisi nama bucket. Contoh: exampledir/exampleobject.txt. */
std::string ObjectName = "exampledir/exampleobject.txt";
/* Inisialisasi sumber daya jaringan. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* Atur header HTTP. */
auto meta = ObjectMetaData();
meta.setContentType("text/plain");
meta.setCacheControl("max-age=3");
/* Atur metadata objek kustom. */
meta.UserMetaData()["meta"] = "meta-value";
std::shared_ptr<std::iostream> content = std::make_shared<std::stringstream>();
*content << "Thank you for using Alibaba Cloud Object Storage Service!";
auto outcome = client.PutObject(BucketName, ObjectName, content, meta);
if (!outcome.isSuccess()) {
/* Tangani pengecualian. */
std::cout << "PutObject fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* Lepaskan sumber daya jaringan. */
ShutdownSdk();
return 0;
}
#include "oss_api.h"
#include "aos_http_io.h"
/* Atur yourEndpoint ke Titik Akhir wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), atur Titik Akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. */
const char *endpoint = "yourEndpoint";
/* Tentukan nama bucket. Misalnya, examplebucket. */
const char *bucket_name = "examplebucket";
/* Tentukan path lengkap objek. Path lengkap tidak boleh berisi nama bucket. Misalnya, exampledir/exampleobject.txt. */
const char *object_name = "exampledir/exampleobject.txt";
const char *object_content= "hello world";
/* Atur yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou. */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
/* Inisialisasi tipe aos_string_t dengan string char*. */
aos_str_set(&options->config->endpoint, endpoint);
/* Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */
aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
// Konfigurasikan dua parameter tambahan berikut.
aos_str_set(&options->config->region, region);
options->config->signature_version = 4;
/* Tentukan apakah CNAME digunakan. Nilai 0 menunjukkan bahwa CNAME tidak digunakan. */
options->config->is_cname = 0;
/* Atur parameter jaringan, seperti periode timeout. */
options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
/* Panggil metode aos_http_io_initialize di awal program untuk menginisialisasi sumber daya global seperti jaringan dan memori. */
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
exit(1);
}
/* Pool memori untuk manajemen memori setara dengan apr_pool_t. Kode implementasinya ada di pustaka apr. */
aos_pool_t *pool;
/* Buat pool memori baru. Parameter kedua adalah NULL, yang menunjukkan bahwa pool baru tidak mewarisi dari pool memori lain. */
aos_pool_create(&pool, NULL);
/* Buat dan inisialisasi opsi. Parameter ini berisi informasi konfigurasi global, seperti endpoint, access_key_id, access_key_secret, is_cname, dan curl. */
oss_request_options_t *oss_client_options;
/* Alokasikan memori untuk opsi dalam pool memori. */
oss_client_options = oss_request_options_create(pool);
/* Inisialisasi opsi klien oss_client_options. */
init_options(oss_client_options);
/* Inisialisasi parameter. */
aos_string_t bucket;
aos_string_t object;
aos_table_t *headers;
aos_list_t buffer;
aos_table_t *resp_headers = NULL;
aos_status_t *resp_status = NULL;
aos_buf_t *content = NULL;
char *content_length_str = NULL;
char *object_type = NULL;
char *object_author = NULL;
int64_t content_length = 0;
aos_str_set(&bucket, bucket_name);
aos_str_set(&object, object_name);
headers = aos_table_make(pool, 2);
/* Atur metadata yang ditentukan pengguna. */
apr_table_set(headers, "Expires", "Fri, 28 Feb 2032 05:38:42 GMT");
apr_table_set(headers, "x-oss-meta-author", "oss");
aos_list_init(&buffer);
content = aos_buf_pack(oss_client_options->pool, object_content, strlen(object_content));
aos_list_add_tail(&content->node, &buffer);
/* Unggah objek dari buffer. */
resp_status = oss_put_object_from_buffer(oss_client_options, &bucket, &object,
&buffer, headers, &resp_headers);
if (aos_status_is_ok(resp_status)) {
printf("put object from buffer with md5 succeeded\n");
} else {
printf("put object from buffer with md5 failed\n");
}
/* Dapatkan metadata objek. */
resp_status = oss_get_object_meta(oss_client_options, &bucket, &object, &resp_headers);
if (aos_status_is_ok(resp_status)) {
content_length_str = (char*)apr_table_get(resp_headers, OSS_CONTENT_LENGTH);
if (content_length_str != NULL) {
content_length = atol(content_length_str);
}
object_author = (char*)apr_table_get(resp_headers, OSS_AUTHORIZATION);
object_type = (char*)apr_table_get(resp_headers, OSS_OBJECT_TYPE);
printf("get object meta succeeded, object author:%s, object type:%s, content_length:%ld\n", object_author, object_type, content_length);
} else {
printf("req:%s, get object meta failed\n", resp_status->req_id);
}
/* Lepaskan pool memori. Ini melepaskan memori yang dialokasikan untuk sumber daya selama permintaan. */
aos_pool_destroy(pool);
/* Lepaskan sumber daya global yang sebelumnya dialokasikan. */
aos_http_io_deinitialize();
return 0;
}
require 'aliyun/oss'
client = Aliyun::OSS::Client.new(
# Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com.
endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
# Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
access_key_id: ENV['OSS_ACCESS_KEY_ID'],
access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# Tentukan nama bucket. Contoh: examplebucket.
bucket = client.get_bucket('examplebucket')
# Atur metadata objek selama unggahan sederhana.
bucket.put_object(
'my-object-1',
:file => 'local-file',
:metas => {'year' => '2016', 'people' => 'mary'})
# Atur metadata objek selama unggahan append.
bucket.append_object(
'my-object-2', 0,
:file => 'local-file',
:metas => {'year' => '2016', 'people' => 'mary'})
# Atur metadata objek selama unggahan yang dapat dilanjutkan.
bucket.resumable_upload(
'my-object',
'local-file',
:metas => {'year' => '2016', 'people' => 'mary'})
package main
import (
"context"
"flag"
"log"
"strings"
"time"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// Definisikan variabel global.
var (
region string // Wilayah penyimpanan.
bucketName string // Nama bucket.
objectName string // Nama objek.
)
// Fungsi init digunakan untuk menginisialisasi parameter baris perintah.
func init() {
flag.StringVar(®ion, "region", "", "Wilayah tempat bucket berada.")
flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
flag.StringVar(&objectName, "object", "", "Nama objek.")
}
func main() {
// Uraikan parameter baris perintah.
flag.Parse()
// Periksa apakah nama bucket kosong.
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama bucket wajib diisi")
}
// Periksa apakah wilayah kosong.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, wilayah wajib diisi")
}
// Periksa apakah nama objek kosong.
if len(objectName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama objek wajib diisi")
}
// Definisikan konten yang akan diunggah.
content := "hi oss"
// Muat konfigurasi default dan atur penyedia kredensial serta wilayah.
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// Buat klien OSS.
client := oss.NewClient(cfg)
// Buat permintaan untuk mengunggah objek.
request := &oss.PutObjectRequest{
Bucket: oss.Ptr(bucketName), // Nama bucket.
Key: oss.Ptr(objectName), // Nama objek.
Body: strings.NewReader(content), // Konten yang akan diunggah.
Expires: oss.Ptr(time.Date(2038, 12, 31, 12, 0, 0, 0, time.UTC).Format(time.RFC1123)), // Waktu kedaluwarsa objek.
Acl: oss.ObjectACLPublicRead,
Metadata: map[string]string{ // Metadata kustom.
"Author": "alibaba oss sdk", // Penulis objek.
"Date": "2024-07-01", // Tanggal pembuatan objek.
},
}
// Kirim permintaan untuk mengunggah objek.
result, err := client.PutObject(context.TODO(), request)
if err != nil {
log.Fatalf("gagal mengunggah objek %v", err)
}
// Cetak hasil pengunggahan objek.
log.Printf("hasil pengunggahan objek:%#v\n", result)
}