All Products
Search
Document Center

Object Storage Service:Pratinjau online WebOffice

Last Updated:May 14, 2026

WebOffice memungkinkan Anda melihat pratinjau dokumen Word, PPT, dan Excel langsung di browser tanpa perlu mengunduh file tersebut.

Skenario

  • Basis pengetahuan perusahaan atau sistem manajemen dokumen: Karyawan dapat mengunggah file dan mengonversinya ke format web untuk dilihat secara cepat, sehingga meningkatkan efisiensi dan keamanan akses informasi.

  • Platform pendidikan daring: Guru dan siswa dapat melihat materi kursus, catatan kuliah, dan tugas secara real time, sehingga meningkatkan interaksi dan pengalaman belajar.

  • Alat kolaborasi dan manajemen proyek: Anggota tim dapat melihat rencana kerja bersama, draf desain, dan laporan langsung di browser, sehingga meningkatkan kolaborasi tim.

Jenis file yang didukung

Jenis file

Ekstensi file

Word

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

PPT

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

Excel

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

PDF

pdf

Catatan penggunaan

  • Akses lintas-wilayah ke objek OSS tidak disarankan. Misalnya, melakukan pratinjau objek di bucket Singapura dari Tiongkok daratan dapat menyebabkan latensi tinggi, kegagalan pratinjau, atau koneksi tidak stabil akibat masalah jaringan lintas batas. Untuk performa dan stabilitas terbaik, akses bucket dari dalam wilayah yang sama.

  • Pratinjau online WebOffice hanya mendukung pemrosesan sinkron menggunakan parameter x-oss-process.

Cara menggunakan

Prasyarat

Buat URL pratinjau

Java

Gunakan Java SDK versi 3.17.4 atau lebih baru. Untuk instruksi instalasi, 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 akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
        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, jika bucket berada di wilayah China (Hangzhou), setel Region ke cn-hangzhou.
        String region = "cn-hangzhou";
        // Buat instance OSSClient.
        // Setelah instance OSSClient tidak digunakan lagi, panggil metode shutdown untuk melepaskan sumber daya.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        // Catatan: Setel nilai ke true untuk mengaktifkan opsi CNAME.
        clientBuilderConfiguration.setSupportCname(true);
        // Secara eksplisit deklarasikan penggunaan algoritma signature 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/preview,export_1,print_1/watermark,text_5YaF6YOo6LWE5paZ,size_30,t_60";
            // Atur waktu kedaluwarsa URL yang ditandatangani menjadi 3600 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, artinya 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("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Terjadi ClientException, artinya klien mengalami "
                    + "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
                    + "misalnya tidak dapat mengakses jaringan.");
            System.out.println("Pesan Error:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

Python

Gunakan Python SDK versi 2.18.4 atau lebih baru. Untuk instruksi instalasi, 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 disetel.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# Tentukan nama bucket.
bucket = 'examplebucket'

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

# Tentukan ID wilayah Alibaba Cloud umum.
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

# Buat instruksi pemrosesan untuk pratinjau online.
image_process = 'doc/preview,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 instruksi instalasi, 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() {
	// Parsing 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")
	}

	// 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 klien OSS.
	client := oss.NewClient(cfg)

	// Hasilkan URL yang telah ditandatangani sebelumnya 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/preview,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 hasil yang dikembalikan berisi header yang ditandatangani, sertakan header permintaan yang sesuai saat Anda mengirim permintaan GET menggunakan URL yang ditandatangani. Hal ini mencegah ketidaksesuaian yang dapat menyebabkan kegagalan permintaan dan kesalahan signature.
		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 instruksi instalasi, 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. Contoh: 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 disetel.
    accessKeyId: process.env.OSS_ACCESS_KEY_ID,
    accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
    bucket: 'examplebucket',
    // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel 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 berdasarkan permintaan aktual yang Anda kirim.
    queries: {
      "x-oss-process": "doc/preview,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

Gunakan PHP SDK versi 2.7.0 atau lebih baru. Untuk instruksi instalasi, 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 disetel.
$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, tentukan nama dokumen. Jika dokumen tidak berada di direktori root, tentukan path lengkap dokumen. 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 mencakup parameter pemrosesan. URL ini berlaku selama 3600 detik dan dapat diakses langsung di browser.
$timeout = 3600;

$options = array(
    // Buat instruksi pemrosesan untuk pratinjau online.
    OssClient::OSS_PROCESS => "doc/preview,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%2Fpreview%2Cexport_1%2Cprint_1%2Fwatermark%2Ctext_5YaF6YOo6LWE5paZ%2Csize_30%2Ct_60&x-oss-date=20250122T020741Z&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, lalu tekan Enter untuk melihat pratinjau dokumen WebOffice.

Parameter

Aksi: doc/preview

Tabel berikut menjelaskan parameter-parameter tersebut.

Parameter

Type

Wajib

Deskripsi

print

int

Tidak

Menentukan apakah pencetakan diizinkan. Nilai yang valid:

  • 1: Diizinkan.

  • 0: Tidak diizinkan.

copy

int

Tidak

Menentukan apakah penyalinan diizinkan. Nilai yang valid:

  • 1: Diizinkan.

  • 0: Tidak diizinkan.

export

int

Tidak

Menentukan apakah ekspor ke PDF diizinkan. Nilai yang valid:

  • 1: Diizinkan.

  • 0: Tidak diizinkan.

maxpage

int

Tidak

Jumlah maksimum halaman yang dirender. Nilainya harus berupa bilangan bulat lebih besar dari 0.

watermark

string

Tidak

Parameter watermark.

text

string

Tidak

Teks watermark. Teks harus dikodekan dalam Base64 yang aman untuk URL. Untuk informasi lebih lanjut, lihat Pengkodean watermark. Kami menyarankan 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 (buram penuh).

Node induk: watermark

color

string

Tidak

Warna teks watermark. Nilainya merupakan nilai warna RGB. Nilai default: #FFFFFF.

Contoh: #000000 menunjukkan hitam, dan #FFFFFF menunjukkan putih.

Node induk: watermark

rotate

int

Tidak

Sudut rotasi searah jarum jam teks. Nilai yang valid: 0 hingga 360. Nilai default: 0 (tanpa rotasi).

Node induk: watermark

type

string

Tidak

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

Font berikut didukung:

  • Font Tionghoa:

    • 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 yang dijelaskan sebelumnya didasarkan pada operasi API. Jika program Anda memerlukan kustomisasi tingkat tinggi, Anda dapat langsung mengirim permintaan REST API. Untuk melakukannya, Anda harus menulis kode secara manual untuk menghitung signature. Untuk informasi lebih lanjut tentang cara menghitung header permintaan umum Authorization, lihat Signature V4 (disarankan).

Informasi pratinjau

  • Dokumen yang akan dipratinjau: example.docx

  • Halaman yang dipratinjau: 3 halaman pertama dokumen

  • Informasi watermark untuk halaman pratinjau:

    • Jenis watermark: Watermark teks

    • Teks watermark: Internal Material

    • Ukuran font: 30

    • Transparansi: 60

  • Izin untuk halaman pratinjau: Mengizinkan pengguna menyalin, mengekspor, dan mencetak

Contoh pemrosesan

GET /example.docx?x-oss-process=doc/preview,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. Sebaliknya, Pengguna Resource Access Management (RAM) atau Peran RAM yang terkait dengan Akun Alibaba Cloud tidak memiliki izin apa pun secara default. Pemilik Akun Alibaba Cloud atau administrator harus memberikan izin kepada Pengguna RAM atau Peran RAM tersebut menggunakan kebijakan RAM atau kebijakan bucket.

Operasi 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.

Operasi API

Aksi

Deskripsi

GenerateWebofficeToken

imm:GenerateWebofficeToken

Digunakan untuk mendapatkan kredensial Weboffice.

RefreshWebofficeToken

imm:RefreshWebofficeToken

Digunakan untuk memperbarui kredensial Weboffice.

Penagihan

Fitur pratinjau online WebOffice dikenai biaya untuk item yang dapat ditagih berikut. Untuk informasi lebih lanjut tentang 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 data 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

DocumentWebofficePreview

Anda dikenai biaya pemrosesan dokumen berdasarkan jumlah panggilan API.

Penting

Anda dikenai biaya untuk pratinjau dokumen online 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

FAQ

Apakah saya dapat melihat pratinjau animasi dan video di PPT dinamis?

Ya, Anda bisa. Namun, fitur pratinjau online mendukung dokumen hingga 200 MB. Dokumen yang melebihi batas ukuran ini tidak dapat diakses.

Apakah saya dapat melihat pratinjau file gambar?

Tidak didukung.

Setelah saya mengaktifkan CDN, muncul error saat menghasilkan URL yang ditandatangani untuk dokumen: Either the Signature query string parameter or the Authorization header should be specified, not both.

Jika Anda mengaktifkan pengambilan asal untuk bucket privat lalu menggunakan nama domain CDN untuk mengakses file di bucket yang telah disambungkan ke proyek IMM, Anda tidak perlu memberikan informasi signature tambahan. Untuk mengatasi masalah ini, konfigurasikan pengaturan sebagai berikut:

  1. Anda harus memberikan izin oss:ProcessImm, imm:GenerateWebofficeToken, dan imm:RefreshWebofficeToken kepada peran CDN default AliyunCDNAccessingPrivateOSSRole.

  2. Akses resource menggunakan URL yang tidak mengandung informasi signature.

    Sebagai contoh, Anda dapat menggunakan URL dalam format berikut untuk menggunakan fitur pratinjau dokumen online: http://cdn.example.info/demo.ppt?x-oss-process=doc/preview,export_1,print_1