全部产品
Search
文档中心

Object Storage Service:Unggah tambahan (Harmony SDK)

更新时间:Nov 30, 2025

Anda dapat menambahkan konten ke objek yang dapat ditambahkan yang sudah ada. Topik ini menjelaskan cara melakukan unggah tambahan menggunakan Object Storage Service (OSS) SDK untuk Harmony 2.0.

Catatan penggunaan

  • Untuk informasi selengkapnya mengenai Wilayah dan titik akhir, lihat Wilayah dan titik akhir.

  • Jika objek yang ingin Anda tambahkan kontennya belum ada, objek yang dapat ditambahkan akan dibuat saat Anda memanggil operasi unggah tambahan.

  • Jika file tersebut sudah ada:

    • Jika objek merupakan objek yang dapat ditambahkan dan posisi yang ditentukan sebagai awal operasi tambah sama dengan panjang objek saat ini, objek tersebut akan ditambahkan di akhir objek.

    • Jika objek merupakan objek yang dapat ditambahkan tetapi posisi yang ditentukan sebagai awal operasi tambah tidak sama dengan panjang objek saat ini, kesalahan PositionNotEqualToLength akan dikembalikan.

    • Jika objek bukan objek yang dapat ditambahkan, kesalahan ObjectNotAppendable akan dikembalikan.

Izin

Secara default, Akun Alibaba Cloud memiliki izin penuh. Pengguna RAM atau Peran RAM di bawah Akun Alibaba Cloud tidak memiliki izin apa pun secara default. Akun Alibaba Cloud atau administrator akun harus memberikan izin operasi melalui RAM Policy atau Bucket policies.

API

Action

Definisi

AppendObject

oss:PutObject

Anda dapat memanggil operasi ini untuk mengunggah objek dengan menambahkannya ke objek yang sudah ada.

oss:PutObjectTagging

Saat mengunggah objek dengan menambahkannya ke objek yang sudah ada, jika Anda menentukan tag objek melalui x-oss-tagging, izin ini diperlukan.

Kode contoh

Kode berikut memberikan contoh cara melakukan unggah tambahan:

import Client, {RequestError } from '@aliyun/oss';

// Buat instans OSSClient.
const client = new Client({
  // Tentukan ID AccessKey yang diperoleh dari Security Token Service (STS).
  accessKeyId: 'yourAccessKeyId',
  // Tentukan Rahasia AccessKey yang diperoleh dari STS.
  accessKeySecret: 'yourAccessKeySecret',
  // Tentukan token keamanan yang diperoleh dari STS.
  securityToken: 'yourSecurityToken',
  // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi oss-cn-hangzhou.
  region: 'oss-cn-hangzhou',
});

// Tentukan nama bucket.
const bucket = 'yourBucketName';
// Tentukan nama objek yang ingin Anda tambahkan kontennya.
const key = 'yourObjectName';

/**
 * Tambahkan konten ke objek OSS.
 * Gunakan metode appendObject untuk menambahkan data ke objek tertentu dalam bucket tertentu.
 */
const appendObject = async () => {
  try {
    // Gunakan metode appendObject untuk menambahkan data ke objek tertentu dalam bucket tertentu.
    // Jangan tentukan parameter position saat pertama kali membuat objek yang dapat ditambahkan. Kemudian, tentukan parameter position saat melakukan operasi unggah tambahan.
    const res = await client.appendObject({
      bucket, // Tentukan nama bucket.
      key,    // Tentukan nama objek.
      data: 'hello world' // Tentukan data yang ingin Anda tambahkan. Pada contoh ini, string sederhana ditambahkan.
    });

    // Tampilkan hasil unggah tambahan.
    console.log(JSON.stringify(res));
  } catch (err) {
    // Tangkap pengecualian selama permintaan.
    if (err instanceof RequestError) {
      // Jika terdapat jenis kesalahan yang dikenal, tampilkan informasi seperti kode kesalahan, pesan kesalahan, ID permintaan, status HTTP, dan EC.
      console.log('code: ', err.code); // Kode kesalahan.
      console.log('message: ', err.message); // Pesan kesalahan.
      console.log('requestId: ', err.requestId); // ID permintaan.
      console.log('status: ', err.status); // Status HTTP.
      console.log('ec: ', err.ec); // EC.
    } else {
      // Tampilkan jenis kesalahan tak dikenal lainnya.
      console.log('unknown error: ', err);
    }
  }
};

// Panggil fungsi appendObject untuk melakukan operasi unggah tambahan.
appendObject();

Skenario umum

Tambahkan file lokal ke objek

Kode contoh berikut menunjukkan cara menambahkan file lokal ke objek:

import Client, { RequestError } from '@aliyun/oss';
import { fileIo as fs } from '@kit.CoreFileKit';

// Buat instans OSSClient.
const client = new Client({
  // Tentukan ID AccessKey yang diperoleh dari STS.
  accessKeyId: 'yourAccessKeyId',
  // Tentukan Rahasia AccessKey yang diperoleh dari STS.
  accessKeySecret: 'yourAccessKeySecret',
  // Tentukan token keamanan yang diperoleh dari STS.
  securityToken: 'yourSecurityToken',
  // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi oss-cn-hangzhou.
  region: 'oss-cn-hangzhou',
});

// Tentukan nama bucket.
const bucket = 'yourBucketName';
// Tentukan nama objek yang ingin Anda tambahkan kontennya.
const key = 'yourObjectName';

/**
 * Tambahkan konten ke objek menggunakan path file lokal.
 * Gunakan metode appendObject untuk menambahkan konten file lokal ke objek dalam bucket tertentu.
 */
const appendObjectByFile = async () => {
  // Buka dan baca file lokal.
  const file=await fs.open('yourFilePath', fs.OpenMode.READ_ONLY); // Tentukan path file lokal.

  try {
    // Gunakan metode appendObject untuk menambahkan konten file lokal ke objek dalam bucket tertentu.
    // Jangan tentukan parameter position saat pertama kali membuat objek yang dapat ditambahkan. Kemudian, tentukan parameter position saat melakukan operasi unggah tambahan.
    const res = await client.appendObject({
      bucket, // Tentukan nama bucket.
      key,    // Tentukan nama objek.
      data: file, // Tentukan file lokal yang ingin Anda tambahkan.
    });

    // Tampilkan hasil unggah tambahan.
    console.log(JSON.stringify(res));
  } catch (err) {
    // Tangkap pengecualian selama permintaan.
    if (err instanceof RequestError) {
      // Jika terdapat jenis kesalahan yang dikenal, tampilkan informasi seperti kode kesalahan, pesan kesalahan, ID permintaan, status HTTP, dan EC.
      console.log('code: ', err.code); // Kode kesalahan.
      console.log('message: ', err.message); // Pesan kesalahan.
      console.log('requestId: ', err.requestId); // ID permintaan.
      console.log('status: ', err.status); // Status HTTP.
      console.log('ec: ', err.ec); // EC.
    } else {
      // Tampilkan jenis kesalahan tak dikenal lainnya.
      console.log('unknown error: ', err);
    }
  } finally {
    // Tutup file lokal setelah operasi selesai.
    await fs.close(file);
  }
};

// Panggil fungsi appendObjectByFile untuk melakukan operasi unggah tambahan.
appendObjectByFile();

Tentukan posisi awal operasi tambah

Kode contoh berikut menunjukkan cara menentukan posisi awal operasi tambah:

import Client, { RequestError, EHeaderKey } from '@aliyun/oss';

// Buat instans OSSClient.
const client = new Client({
  // Tentukan ID AccessKey yang diperoleh dari STS.
  accessKeyId: 'yourAccessKeyId',
  // Tentukan Rahasia AccessKey yang diperoleh dari STS.
  accessKeySecret: 'yourAccessKeySecret',
  // Tentukan token keamanan yang diperoleh dari STS.
  securityToken: 'yourSecurityToken',
  // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi oss-cn-hangzhou.
  region: 'oss-cn-hangzhou',
});

// Tentukan nama bucket.
const bucket = 'yourBucketName';
// Tentukan nama objek yang ingin Anda tambahkan kontennya.
const key = 'yourObjectName';

/**
 * Tambahkan konten ke objek OSS dan tentukan posisi awal operasi tambah.
 * Gunakan metode appendObject untuk menambahkan blok data ke objek tertentu dalam bucket tertentu serta tentukan posisi awal operasi tambah.
 */
const appendObjectWithPosition = async () => {
  try {
    // Panggil metode appendObject untuk memulai unggah tambahan pertama guna menambahkan blok data awal.
    const res = await client.appendObject({
      bucket, // Tentukan nama bucket.
      key,    // Tentukan nama objek.
      data: 'first chunk data', // Blok data pertama.
    });

    // Tampilkan hasil unggah tambahan pertama.
    console.log(JSON.stringify(res));

    /* Dapatkan posisi awal untuk operasi tambah berikutnya.
    const nextAppendPosition = Number(res.origRes.headers[EHeaderKey.X_OSS_NEXT_APPEND_POSITION]);

    // Panggil metode appendObject untuk memulai unggah tambahan kedua guna menambahkan blok data kedua.
    const res1 = await client.appendObject({
      bucket, // Tentukan nama bucket.
      key,    // Tentukan nama objek.
      data: 'second chunk data', // Blok data kedua.
      position: nextAppendPosition, // Posisi awal untuk operasi tambah kedua.
    });

    // Tampilkan hasil unggah tambahan kedua.
    console.log(JSON.stringify(res1));
  } catch (err) {
    // Tangkap pengecualian selama permintaan.
    if (err instanceof RequestError) {
      // Jika terdapat jenis kesalahan yang dikenal, tampilkan informasi seperti kode kesalahan, pesan kesalahan, ID permintaan, status HTTP, dan EC.
      console.log('code: ', err.code); // Kode kesalahan.
      console.log('message: ', err.message); // Pesan kesalahan.
      console.log('requestId: ', err.requestId); // ID permintaan.
      console.log('status: ', err.status); // Status HTTP.
      console.log('ec: ', err.ec); // EC.
    } else {
      // Tampilkan jenis kesalahan tak dikenal lainnya.
      console.log('unknown error: ', err);
    }
  }
};

// Panggil fungsi appendObjectWithPosition untuk melakukan operasi unggah tambahan guna menambahkan blok data.
appendObjectWithPosition();