All Products
Search
Document Center

Object Storage Service:Pengeditan daring WebOffice

Last Updated:May 14, 2026

Pengeditan daring WebOffice memungkinkan Anda mengedit dokumen Word, presentasi PowerPoint, dan spreadsheet Excel langsung di browser.

Kasus penggunaan

  • Platform kantor kolaboratif: Memungkinkan beberapa pengguna mengedit dokumen yang sama secara real time.

  • Sistem manajemen konten: Mengaktifkan pengeditan dokumen daring untuk membuat, membaca, memperbarui, dan menghapus file langsung dalam sistem.

  • Platform pendidikan: Memungkinkan siswa mengirimkan tugas atau guru membuat materi ajar, serta menyimpan dokumen ke cloud untuk akses dan berbagi yang mudah.

Jenis file yang didukung

Jenis file

Ekstensi

Word

doc, dot, wps, wpt, docx, dotx, docm, dotm

PPT

ppt, pptx, pptm, ppsx, ppsm, pps, potx, potm, dpt, dps

Excel

xls, xlt, et, xlsx, xltx, xlsm, xltm

Catatan penggunaan

  • Hindari mengakses objek OSS lintas wilayah. Misalnya, jika file disimpan di bucket di wilayah Singapura tetapi diminta dari daratan Tiongkok, kondisi jaringan lintas batas dapat menurunkan kualitas koneksi, menyebabkan peningkatan latensi, kegagalan pratinjau, atau koneksi tidak stabil—yang berdampak pada stabilitas jaringan dan pengalaman pengguna. Untuk performa optimal, pastikan client dan bucket berada di wilayah yang sama.

  • Pengeditan daring WebOffice hanya mendukung pemrosesan sinkron menggunakan parameter x-oss-process.

Cara menggunakan

Prasyarat

Buat URL pengeditan

Java

Contoh ini memerlukan Alibaba Cloud SDK for Java 3.17.4 atau versi lebih baru. Untuk informasi selengkapnya tentang cara menginstal SDK, lihat Instalasi.

package com.aliyun.oss.demo;
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.GeneratePresignedUrlRequest;
import java.net.URL;
import java.util.Date;

public class Demo {
    public static void main(String[] args) throws Throwable {
        // Tentukan nama domain kustom Anda. Contoh: http://static.example.com.
        String endpoint = "http://static.example.com";
        // Dapatkan kredensial dari variabel lingkungan. Sebelum menjalankan kode contoh ini, 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. Jika objek tidak berada di direktori root bucket, Anda harus menentukan path lengkapnya.
        String objectName = "exampledir/exampleobject.docx";
        // Tentukan wilayah tempat bucket berada. Misalnya, untuk Tiongkok (Hangzhou), atur wilayah menjadi cn-hangzhou.
        String region = "cn-hangzhou";
        // Buat instance OSSClient.
        // Panggil metode shutdown untuk melepaskan sumber daya ketika instance OSSClient tidak lagi diperlukan.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        // Atur supportCname ke true untuk mengaktifkan CNAME.
        clientBuilderConfiguration.setSupportCname(true);
        // Secara eksplisit deklarasikan bahwa Signature Version 4 digunakan.
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // Tentukan parameter pemrosesan dokumen.
            String style = "doc/edit,export_1,print_1/watermark,text_5YaF6YOo6LWE5paZ,size_30,t_60";
            // Atur waktu kedaluwarsa URL yang ditandatangani menjadi 3.600 detik.
            Date expiration = new Date(new Date().getTime() + 3600 * 1000L  );
            GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.GET);
            req.setExpiration(expiration);
            req.setProcess(style);
            URL signedUrl = ossClient.generatePresignedUrl(req);
            System.out.println(signedUrl);
        } catch (OSSException oe) {
            System.out.println("Terjadi OSSException, yang berarti permintaan Anda sampai ke OSS, "
                    + "tetapi ditolak dengan tanggapan error karena suatu alasan.");
            System.out.println("Pesan Error:" + oe.getErrorMessage());
            System.out.println("Kode Error:" + 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 client mengalami "
                    + "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
                    + "seperti tidak dapat mengakses jaringan.");
            System.out.println("Pesan Error:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

Python

Contoh ini memerlukan Alibaba Cloud SDK for Python 2.18.4 atau versi lebih baru. Untuk informasi selengkapnya tentang cara menginstal SDK, lihat Instalasi (Python SDK V1).

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# Dapatkan kredensial dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# Tentukan nama bucket.
bucket_name = 'examplebucket'

# Tentukan nama domain kustom Anda. Contoh: https://static.example.com.
endpoint = 'https://static.example.com'

# Tentukan ID wilayah Alibaba Cloud.
region = 'cn-hangzhou'
# Inisialisasi bucket menggunakan nama domain kustom.
bucket = oss2.Bucket(auth, endpoint, bucket_name, is_cname=True, region=region)

# Tentukan objek yang akan diproses.
key = 'example.docx'

# Tentukan waktu kedaluwarsa dalam detik.
expire_time = 3600

# Buat instruksi pemrosesan untuk pengeditan daring.
image_process = 'doc/edit,export_1,print_1/watermark,text_5YaF6YOo6LWE5paZ,size_30,t_60'


# Hasilkan URL yang ditandatangani yang berisi parameter pemrosesan.
url = bucket.sign_url('GET', key, expire_time, params={'x-oss-process': image_process}, slash_safe=True)

# Cetak URL yang ditandatangani.
print(url)

Go

Contoh ini memerlukan Alibaba Cloud SDK for Go 3.0.2 atau versi lebih baru. Untuk informasi selengkapnya tentang cara menginstal SDK, lihat Instal OSS Go SDK.

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"
)

// Definisikan variabel global.
var (
	region     string // Wilayah.
	bucketName string // Nama bucket.
	objectName string // Nama objek.
)

// Fungsi init digunakan untuk menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
	flag.StringVar(&objectName, "object", "", "Nama objek.")
}

func main() {
	// Parsing parameter baris perintah.
	flag.Parse()

	// Periksa apakah nama bucket kosong.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Periksa apakah wilayah kosong.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	// Periksa apakah nama objek kosong.
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama objek diperlukan")
	}

	// Muat konfigurasi default dan atur penyedia kredensial serta wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region).
        // Tentukan nama domain kustom Anda. Contoh: http://static.example.com.
		WithEndpoint("http://static.example.com").
		WithUseCName(true)

	// Buat client OSS.
	client := oss.NewClient(cfg)

	// Hasilkan URL yang telah ditandatangani untuk GetObject.
	result, err := client.Presign(context.TODO(), &oss.GetObjectRequest{
		Bucket:  oss.Ptr(bucketName),
		Key:     oss.Ptr(objectName),
        // Tentukan parameter pemrosesan dokumen.
		Process: oss.Ptr("doc/edit,export_1,print_1/watermark,text_5YaF6YOo6LWE5paZ,size_30,t_60"), 
	}, oss.PresignExpires(10*time.Minute))

	if err != nil {
		log.Fatalf("gagal mendapatkan presign objek %v", err)
	}

	log.Printf("metode permintaan:%v\n", result.Method)
	log.Printf("waktu kedaluwarsa permintaan:%v\n", result.Expiration)
	log.Printf("URL permintaan:%v\n", result.URL)

	if len(result.SignedHeaders) > 0 {
		// Jika respons menyertakan header yang ditandatangani, Anda harus menyertakannya dalam permintaan GET yang menggunakan URL yang ditandatangani untuk mencegah kesalahan ketidakcocokan signature.
		log.Printf("header yang ditandatangani:\n")
		for k, v := range result.SignedHeaders {
			log.Printf("%v: %v\n", k, v)
		}
	}
}

Node.js

Contoh ini memerlukan Alibaba Cloud SDK for Node.js 8.0 atau versi lebih baru. Untuk informasi selengkapnya tentang cara menginstal SDK, lihat Instalasi (Node.js SDK).

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

// Definisikan fungsi untuk menghasilkan URL yang ditandatangani.
async function generateSignatureUrl(fileName) {
  // Dapatkan URL yang ditandatangani.
  const client = await new OSS({
    // Tentukan nama domain kustom Anda. Contoh: http://static.example.com.
    endpoint: 'http://static.example.com',
    // Dapatkan kredensial dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
    accessKeyId: process.env.OSS_ACCESS_KEY_ID,
    accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
    bucket: 'examplebucket',
    // Tentukan wilayah tempat bucket berada. Misalnya, untuk Tiongkok (Hangzhou), atur wilayah menjadi oss-cn-hangzhou.
    region: 'oss-cn-hangzhou',
    authorizationV4: true,
    cname: true
  });

  // Hasilkan URL yang ditandatangani yang berisi parameter pemrosesan dokumen.
  return await client.signatureUrlV4('GET', 3600, {
    headers: {}, // Atur header permintaan sesuai permintaan aktual Anda.
    queries: {
      "x-oss-process": "doc/edit,export_1,print_1/watermark,text_5YaF6YOo6LWE5paZ,size_30,t_60" // Tambahkan parameter pemrosesan dokumen.
    }
  }, fileName);
}

// Panggil fungsi dan berikan nama file.
generateSignatureUrl('yourFileName').then(url => {
  console.log('URL Signature yang Dihasilkan:', url);
}).catch(err => {
  console.error('Kesalahan saat menghasilkan URL signature:', err);
});

PHP

Contoh ini memerlukan Alibaba Cloud SDK for PHP 2.7.0 atau versi lebih baru. Untuk informasi selengkapnya tentang cara menginstal SDK, lihat Instalasi (PHP SDK V1).

<?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\OssClient;
use OSS\Core\OssException;
use OSS\Http\RequestCore;
use OSS\Http\ResponseCore;
use OSS\Credentials\EnvironmentVariableCredentialsProvider;

// Dapatkan kredensial dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
$provider = new EnvironmentVariableCredentialsProvider();
//Tentukan nama domain kustom Anda. Contoh: http://static.example.com.
$endpoint = "http://static.example.com";
// Tentukan nama bucket. Contoh: examplebucket.
$bucket = "examplebucket";
// Jika dokumen berada di direktori root bucket, cukup tentukan nama dokumen. Jika tidak, tentukan path lengkapnya. Contoh: exampledir/example.docx.
$object = 'example.docx'; 

$config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,
        "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
        "cname"	=> true,
        "region"=> "cn-hangzhou"
    );
    $ossClient = new OssClient($config);

// Hasilkan URL yang ditandatangani yang berisi parameter pemrosesan. URL ini berlaku selama 3.600 detik dan dapat diakses langsung di browser.
$timeout = 3600;

$options = array(
    // Buat instruksi pemrosesan untuk pengeditan daring.
    OssClient::OSS_PROCESS => "doc/edit,export_1,print_1/watermark,text_5YaF6YOo6LWE5paZ,size_30,t_60");
$signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "GET", $options);
print("url: \n" . $signedUrl);

Berikut ini adalah contoh URL yang ditandatangani yang dihasilkan:

http://static.example.com/example.docx?x-oss-process=doc%2Fedit%2Cexport_1%2Cprint_1%2Fwatermark%2Ctext_5YaF6YOo6LWE5paZ%2Csize_30%2Ct_60&x-oss-date=20250220T095032Z&x-oss-expires=3600&x-oss-signature-version=OSS4-HMAC-SHA256&x-oss-credential=LTAI********************%2F20250122%2Fcn-hangzhou%2Foss%2Faliyun_v4_request&x-oss-signature=514ed93accdb80921c4b2897c6147fdb1599308c6457f68ee0ac2f771c7d0312

Salin URL yang dihasilkan ke bilah alamat browser Anda dan tekan Enter untuk membuka dokumen guna diedit.

Parameter

Aksi: doc/edit

Tabel berikut menjelaskan parameter-parameter tersebut.

Parameter

Jenis

Wajib

Deskripsi

print

int

Tidak

Menentukan apakah pencetakan diizinkan. Nilai yang valid:

  • 1: Izinkan pencetakan.

  • 0: Larang pencetakan. Ini adalah nilai default.

export

int

Tidak

Menentukan apakah ekspor ke PDF diizinkan. Nilai yang valid:

  • 1: Izinkan ekspor ke PDF.

  • 0: Larang ekspor ke PDF. Ini adalah nilai default.

watermark

string

Tidak

Parameter watermark.

text

string

Tidak

Teks watermark. Nilainya harus di-encode Base64 yang aman untuk URL. Untuk informasi selengkapnya, lihat Encoding watermark. Kami menyarankan Anda menggunakan encoder base64url.

Induk: watermark

size

int

Tidak

Ukuran font teks watermark. Nilainya harus berupa bilangan bulat lebih besar dari 0.

Induk: watermark

t

int

Tidak

Opasitas teks watermark. Nilai yang valid: 0 hingga 100. Nilai default: 100.

Induk: watermark

color

string

Tidak

Warna teks watermark, ditentukan sebagai nilai heksadesimal RGB. Nilai default adalah #FFFFFF.

Contoh: #000000 untuk hitam dan #FFFFFF untuk putih.

Induk: watermark

rotate

int

Tidak

Sudut rotasi searah jarum jam. Nilai yang valid: 0 hingga 360. Nilai default: 0.

Nilai default adalah 0, yang menunjukkan tidak ada rotasi.

Induk: watermark

type

string

Tidak

Font teks watermark. Nilainya harus di-encode Base64 yang aman untuk URL. Untuk informasi selengkapnya, lihat Encoding watermark. Kami menyarankan Anda menggunakan encoder base64url.

Font yang didukung:

  • Font Tionghoa:

    • Song Ti (default)

    • Kai Ti

  • Font Inggris:

    • Arial

    • Georgia

    • Tahoma

    • Comic Sans MS

    • Times New Roman

    • Courier New, Verdana

Induk: watermark

Referensi API

Operasi di atas menggunakan SDK. Untuk kustomisasi lebih lanjut, Anda dapat membuat permintaan REST API langsung, yang mengharuskan Anda menghitung signature secara manual. Untuk informasi tentang cara menghitung header permintaan Authorization, lihat Signature Version 4 (disarankan).

Skenario contoh

  • Dokumen yang akan diedit: example.docx

  • Informasi watermark untuk halaman pengeditan:

    • Jenis watermark: Teks

    • Teks watermark: Internal Material

    • Ukuran font watermark: 30

    • Opasitas watermark: 60

  • Izin untuk halaman pengeditan: Izinkan ekspor dan cetak

Contoh permintaan

GET /example.docx?x-oss-process=doc/edit,export_1,print_1/watermark,text_5YaF6YOo6LWE5paZ,size_30,t_60 HTTP/1.1
Host: doc-demo.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 28 Oct 2022 06:40:10 GMT
Authorization: SignatureValue

Izin

Secara default, Akun Alibaba Cloud memiliki semua izin. Secara default, Pengguna RAM dan Peran RAM tidak memiliki izin apa pun. Akun Alibaba Cloud atau Pengguna RAM dengan hak administratif harus memberikan izin kepada mereka menggunakan kebijakan RAM atau kebijakan bucket.

API

Tindakan

Deskripsi

GetObject

oss:GetObject

Diperlukan untuk mengunduh objek.

oss:GetObjectVersion

Diperlukan saat Anda mengunduh versi objek tertentu menggunakan parameter versionId.

kms:Decrypt

Diperlukan jika objek dienkripsi menggunakan SSE-KMS.

API

Aksi

Deskripsi

N/A

oss:ProcessImm

Diperlukan untuk memproses data menggunakan IMM melalui OSS.

API

Aksi

Deskripsi

GenerateWebofficeToken

imm:GenerateWebofficeToken

Diperlukan untuk mendapatkan kredensial WebOffice.

RefreshWebofficeToken

imm:RefreshWebofficeToken

Diperlukan untuk memperbarui kredensial WebOffice.

Penagihan

Pengeditan daring WebOffice dikenai biaya untuk item yang dapat ditagih berikut. Untuk detail harga, lihat Harga OSS dan Item yang dapat ditagih.

API

Item yang dapat ditagih

Deskripsi

GetObject

Permintaan GET

Anda dikenai biaya permintaan berdasarkan jumlah permintaan yang berhasil.

Lalu lintas keluar melalui Internet

Jika Anda memanggil operasi GetObject menggunakan titik akhir publik, seperti oss-cn-hangzhou.aliyuncs.com, atau titik akhir percepatan, seperti oss-accelerate.aliyuncs.com, Anda dikenai biaya lalu lintas keluar melalui Internet berdasarkan ukuran data.

Pengambilan objek IA

Jika objek IA diambil, Anda dikenai biaya pengambilan data IA berdasarkan ukuran data IA yang diambil.

Pengambilan objek Archive di bucket yang diaktifkan akses real-time

Jika Anda mengambil objek Archive di bucket yang diaktifkan akses real-time, Anda dikenai biaya pengambilan data Archive berdasarkan ukuran objek Archive yang diambil.

Biaya akselerasi transfer

Jika Anda mengaktifkan akselerasi transfer dan menggunakan titik akhir percepatan untuk mengakses bucket Anda, Anda dikenai biaya akselerasi transfer berdasarkan ukuran data.

API

Item yang dapat ditagih

Deskripsi

GenerateWebofficeToken

DocumentWebofficeEdit

Anda dikenai biaya pemrosesan dokumen berdasarkan jumlah panggilan API.

Penting

Anda dikenai biaya untuk mengedit dokumen daring berdasarkan jumlah kali dokumen dibuka untuk proyek yang dibuat sebelum 1 Desember 2023, dan berdasarkan jumlah panggilan API untuk proyek yang dibuat pada atau setelah tanggal tersebut.

RefreshWebofficeToken