全部产品
Search
文档中心

Object Storage Service:Pengeditan daring WebOffice

更新时间:Nov 09, 2025

Gunakan fitur Pengeditan Daring WebOffice untuk mengedit dokumen Word, presentasi PowerPoint, dan spreadsheet Excel secara langsung.

Skenario

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

  • Sistem manajemen konten: Menyediakan kemampuan pengeditan dokumen daring untuk membuat, membaca, memperbarui, dan menghapus dokumen langsung di dalam sistem.

  • Platform pendidikan: Memungkinkan siswa mengirimkan tugas dan guru membuat materi ajar. Dokumen disimpan di cloud untuk kemudahan akses dan berbagi.

Jenis file yang didukung

Jenis file

Ekstensi file

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

Cara menggunakan

Prasyarat

Dapatkan URL untuk mengedit

Java

Gunakan Java SDK versi 3.17.4 atau lebih baru. Untuk informasi lebih lanjut tentang cara menginstal Java 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. Contohnya, http://static.example.com.
        String endpoint = "http://static.example.com";
        // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Tentukan nama bucket. Contohnya, examplebucket.
        String bucketName = "examplebucket";
        // Tentukan jalur lengkap objek. Jika objek tidak berada di direktori root bucket, Anda harus menyertakan jalur lengkap.
        String objectName = "exampledir/exampleobject.docx";
        // Tentukan wilayah tempat bucket berada. Contohnya, jika bucket berada di wilayah China (Hangzhou), atur Region ke cn-hangzhou.
        String region = "cn-hangzhou";
        // Buat instance OSSClient.
        // Saat instance OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepaskan sumber daya.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        // Catatan: Atur parameter ini ke true untuk mengaktifkan opsi CNAME.
        clientBuilderConfiguration.setSupportCname(true);
        // Nyatakan secara eksplisit penggunaan algoritma tanda tangan V4.
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // 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("Tangkap OSSException, yang berarti permintaan Anda sampai ke OSS, "
                    + "tetapi ditolak dengan respons 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("Tangkap 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();
            }
        }
    }
}

Python

Gunakan Python SDK versi 2.18.4 atau lebih baru. Untuk informasi lebih lanjut tentang cara menginstal Python SDK, lihat Instalasi (Python SDK V1).

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

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

# Tentukan nama bucket.
bucket = 'examplebucket'

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

# Tentukan ID wilayah umum Alibaba Cloud.
region = 'cn-hangzhou'
# Gunakan nama domain kustom untuk menginisialisasi bucket.
bucket = oss2.Bucket(auth, endpoint, bucket, is_cname=True, region=region)

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

# Tentukan waktu kedaluwarsa dalam detik.
expire_time = 3600

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


# Hasilkan URL yang ditandatangani dengan 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

Gunakan Go SDK versi 3.0.2 atau lebih baru. Untuk informasi lebih lanjut tentang cara menginstal Go 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 penyimpanan.
	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() {
	// Parse 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 dan wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region).
        // Tentukan nama domain kustom Anda. Contohnya, http://static.example.com.
		WithEndpoint("http://static.example.com").
		WithUseCName(true)

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

	// Hasilkan URL pra-tandatangani untuk GetObject.
	result, err := client.Presign(context.TODO(), &oss.GetObjectRequest{
		Bucket:  oss.Ptr(bucketName),
		Key:     oss.Ptr(objectName),
        // Atur 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("kedaluwarsa permintaan:%v\n", result.Expiration)
	log.Printf("URL permintaan:%v\n", result.URL)

	if len(result.SignedHeaders) > 0 {
		// Jika hasil mencakup header yang ditandatangani, sertakan header permintaan yang sesuai saat Anda mengirim permintaan GET menggunakan URL yang ditandatangani. Ini mencegah ketidaksesuaian yang dapat menyebabkan kegagalan permintaan dan kesalahan tanda tangan.
		log.Printf("header yang ditandatangani:\n")
		for k, v := range result.SignedHeaders {
			log.Printf("%v: %v\n", k, v)
		}
	}
}

Node.js

Gunakan Node.js SDK versi 8.0 atau lebih baru. Untuk informasi lebih lanjut tentang cara menginstal Node.js SDK, lihat Instalasi.

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. Contohnya, http://static.example.com.
    endpoint: 'http://static.example.com',
    // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh 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,
    bucket: 'examplebucket',
    // Tentukan wilayah tempat bucket berada. Contohnya, jika bucket berada di wilayah China (Hangzhou), atur Region ke oss-cn-hangzhou.
    region: 'oss-cn-hangzhou',
    authorizationV4: true,
    cname: true
  });

  // Hasilkan URL yang ditandatangani yang mencakup parameter pemrosesan dokumen.
  return await client.signatureUrlV4('GET', 3600, {
    headers: {}, // Atur header permintaan di sini berdasarkan header permintaan aktual yang Anda kirim.
    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 teruskan nama file.
generateSignatureUrl('yourFileName').then(url => {
  console.log('Generated Signature URL:', url);
}).catch(err => {
  console.error('Error generating signature URL:', err);
});

PHP

Gunakan PHP SDK versi 2.7.0 atau lebih baru. Untuk informasi lebih lanjut tentang cara menginstal PHP SDK, lihat Instalasi.

<?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 akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
$provider = new EnvironmentVariableCredentialsProvider();
// Tentukan nama domain kustom Anda. Contohnya, http://static.example.com.
$endpoint = "http://static.example.com";
// Tentukan nama bucket. Contohnya, examplebucket.
$bucket = "examplebucket";
// Jika dokumen berada di direktori root bucket, tentukan nama dokumen. Jika dokumen tidak berada di direktori root, Anda harus menyertakan jalur lengkap dokumen, seperti 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 dengan parameter pemrosesan. URL tersebut valid selama 3.600 detik dan dapat diakses langsung di browser.
$timeout = 3600;

$options = array(
    // Konstruksi instruksi pemrosesan untuk pratinjau 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 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, tempelkan ke bilah alamat browser Anda, dan tekan Enter untuk mulai mengedit dokumen WebOffice.

Deskripsi parameter

Aksi: doc/edit

Tabel berikut menjelaskan parameter yang digunakan.

Parameter

Tipe

Diperlukan

Deskripsi

print

int

Tidak

Menentukan apakah pencetakan diizinkan. Nilai yang valid:

  • 1: mengizinkan pencetakan.

  • Jika Anda tidak menentukan parameter ini, pencetakan tidak diizinkan.

export

int

Tidak

Menentukan apakah ekspor dokumen sebagai file PDF diizinkan. Nilai yang valid:

  • 1: mengizinkan ekspor.

  • Jika Anda tidak menentukan parameter ini, ekspor tidak diizinkan.

watermark

string

Tidak

Parameter watermark.

text

string

Tidak

Teks watermark. Teks tersebut harus dikodekan dalam format Base64 yang aman untuk URL. Untuk informasi lebih lanjut, lihat Pengkodean watermark. Kami merekomendasikan Anda menggunakan penyandi base64url untuk pengkodean.

Node induk: watermark

size

int

Tidak

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

Node induk: watermark

t

int

Tidak

Transparansi teks watermark. Nilai yang valid: 0 hingga 100. Nilai default: 100. Nilai 100 menunjukkan bahwa watermark tidak transparan.

Node induk: watermark

color

string

Tidak

Warna teks watermark. Tentukan warna dalam format RGB. Nilai default: #FFFFFF.

Contohnya, #000000 menunjukkan hitam, dan #FFFFFF menunjukkan putih.

Node induk: watermark

rotate

int

Tidak

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

Nilai default: 0. Nilai 0 menunjukkan bahwa teks tidak dirotasi.

Node induk: watermark

type

string

Tidak

Font teks watermark. Font tersebut harus dikodekan dalam format Base64 yang aman untuk URL. Untuk informasi lebih lanjut, lihat Pengkodean watermark. Kami merekomendasikan Anda menggunakan penyandi base64url untuk pengkodean.

Font berikut didukung:

  • Font Cina:

    • Song Ti (default)

    • Kai Ti

  • Font Inggris:

    • Arial

    • Georgia

    • Tahoma

    • Comic Sans MS

    • Times New Roman

    • Courier New, Verdana

Node induk: watermark

Operasi API terkait

Operasi sebelumnya didasarkan pada operasi API. Untuk penyesuaian lanjutan, Anda dapat langsung mengirim permintaan REST API. Ini memerlukan Anda menulis kode secara manual untuk menghitung tanda tangan. Untuk informasi lebih lanjut tentang menghitung tanda tangan untuk header permintaan Authorization umum, lihat Signature V4 (disarankan).

Informasi pengeditan

  • Dokumen yang akan diedit: example.docx

  • Pengaturan watermark:

    • Jenis watermark: Watermark teks

    • Teks watermark: Internal Material

    • Ukuran font watermark: 30

    • Transparansi watermark: 60

  • Izin halaman pengeditan: Mengizinkan pengguna mengekspor dan mencetak

Contoh pemrosesan

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, sedangkan Pengguna RAM atau Peran RAM tidak memiliki izin. Untuk memberikan izin kepada Pengguna RAM atau Peran RAM, pemilik akun Alibaba Cloud atau administrator harus menggunakan Kebijakan RAM atau Kebijakan bucket.

API

Aksi

Deskripsi

GetObject

oss:GetObject

Mengunduh objek.

oss:GetObjectVersion

Jika Anda menentukan versi objek menggunakan versionId saat mengunduh objek, Anda harus memiliki izin untuk aksi ini.

kms:Decrypt

Jika metadata objek berisi X-Oss-Server-Side-Encryption: KMS saat Anda mengunduh objek, Anda harus memiliki izin untuk aksi ini.

Operasi API

Aksi

Deskripsi

Tidak ada

oss:ProcessImm

Izin untuk menggunakan IMM melalui OSS untuk pemrosesan data.

API

Aksi

Deskripsi

GenerateWebofficeToken

imm:GenerateWebofficeToken

Digunakan untuk mendapatkan kredensial Weboffice.

RefreshWebofficeToken

imm:RefreshWebofficeToken

Digunakan untuk menyegarkan kredensial Weboffice.

Penagihan

Pengeditan daring WebOffice mengakibatkan item yang dapat ditagih berikut. Untuk informasi lebih lanjut tentang harga item yang dapat ditagih, lihat Harga OSS dan Item yang dapat ditagih.

API

Item yang dapat ditagih

Deskripsi

GetObject

Permintaan GET

Anda dikenakan biaya permintaan berdasarkan jumlah permintaan yang berhasil.

Lalu lintas keluar Internet

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

Pengambilan objek IA

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

Pengambilan objek Arsip dalam bucket tempat akses real-time diaktifkan

Jika Anda mengambil objek Arsip dalam bucket tempat akses real-time diaktifkan, Anda dikenakan biaya pengambilan data Arsip berdasarkan ukuran objek Arsip yang diambil.

Biaya percepatan transfer

Jika Anda mengaktifkan percepatan transfer dan menggunakan endpoint percepatan untuk mengakses bucket Anda, Anda dikenakan biaya percepatan transfer berdasarkan ukuran data.

API

Item yang dapat ditagih

Deskripsi

GenerateWebofficeToken

DocumentWebofficeEdit

Anda dikenakan biaya pemrosesan dokumen berdasarkan jumlah panggilan API.

Penting

Anda dikenakan 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

Catatan

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