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
Di OSS, buat bucket, unggah dokumen Office yang ingin Anda edit ke bucket tersebut, dan ikat proyek Intelligent Media Management (IMM) ke bucket tersebut. Proyek IMM harus berada di wilayah yang sama dengan bucket.
Anda harus mengakses OSS menggunakan nama domain kustom.
CatatanJika Anda melihat pesan bahwa nama domain tidak ada dalam daftar izin WebView mini program, hubungi dukungan teknis Intelligent Media Management (IMM) melalui grup DingTalk (ID: 88490020073). Tim dukungan akan memperbarui daftar izin menggunakan file validasi domain tepercaya WeChat yang Anda berikan.
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(®ion, "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=514ed93accdb80921c4b2897c6147fdb1599308c6457f68ee0ac2f771c7d0312Salin 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 |
int | Tidak | Menentukan apakah pencetakan diizinkan. Nilai yang valid:
| |
export | int | Tidak | Menentukan apakah ekspor ke PDF diizinkan. Nilai yang valid:
|
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:
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: SignatureValueIzin
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 |
| Diperlukan untuk mengunduh objek. |
| Diperlukan saat Anda mengunduh versi objek tertentu menggunakan parameter | |
| Diperlukan jika objek dienkripsi menggunakan SSE-KMS. |
API | Aksi | Deskripsi |
N/A |
| Diperlukan untuk memproses data menggunakan IMM melalui OSS. |
API | Aksi | Deskripsi |
GenerateWebofficeToken |
| Diperlukan untuk mendapatkan kredensial WebOffice. |
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 |