Todos os produtos
Search
Central de documentação

Object Storage Service:WebOffice online preview

Última atualização: Jul 03, 2026

Visualize arquivos Word, PPT e Excel diretamente no navegador com o WebOffice, sem necessidade de baixe.

Casos de uso

  • Bases de conhecimento corporativas ou sistemas de gestão documental: faça upload e converta arquivos para formato web, permitindo visualize rápida e segura sem downloads.

  • Plataformas de educação online: acesse materiais didáticos, anotações de aulas e tarefas em tempo real para melhorar a colaboração.

  • Ferramentas de colaboração e gestão de projetos: visualize planos compartilhados, designs e relatórios diretamente no navegador.

Tipos de arquivo compatíveis

Tipo de arquivo

Extensão do arquivo

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

Observações de uso

  • Evite acesso entre regiões. A visualize de um objeto em uma região diferente pode causar alta latência, falhas na pré-visualização ou conexões instáveis. Para garantir melhor desempenho e estabilidade, acesse os buckets dentro da própria região.

  • A visualize online com WebOffice aceita apenas processamento síncrono por meio do parâmetro x-oss-process.

Como usar

Pré-requisitos

Gerar uma URL de visualize

Java

Requer Java SDK 3.17.4 ou posterior (Instalação).

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 {
        // Specify your custom domain name. Example: http://static.example.com.
        String endpoint = "http://static.example.com";
        // Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Specify the bucket name. Example: examplebucket.
        String bucketName = "examplebucket";
        // Specify the full path of the object. If the object is not in the root directory of the bucket, you must specify the full path.
        String objectName = "exampledir/exampleobject.docx";
        // Specify the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set Region to cn-hangzhou.
        String region = "cn-hangzhou";
        // Create an OSSClient instance.
        // When the OSSClient instance is no longer used, call the shutdown method to release resources.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        // Note: Set the value to true to enable the CNAME option.
        clientBuilderConfiguration.setSupportCname(true);
        // Explicitly declare the use of the V4 signature algorithm.
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // Document processing parameters.
            String style = "doc/preview,export_1,print_1/watermark,text_5YaF6YOo6LWE5paZ,size_30,t_60";
            // Set the expiration time of the signed URL to 3600 seconds.
            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("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

Python

Requer Python SDK 2.18.4 ou posterior (Instalação (Python SDK V1)).

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

# Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# Specify the bucket name.
bucket = 'examplebucket'

# Specify your custom domain name. Example: https://static.example.com.
endpoint = 'https://static.example.com'

# Specify the general-purpose Alibaba Cloud region ID.
region = 'cn-hangzhou'

# Use the custom domain name to initialize the bucket.
bucket = oss2.Bucket(auth, endpoint, bucket, is_cname=True, region=region)

# Specify the file to process.
key = 'example.docx'

# Specify the expiration time in seconds.
expire_time = 3600

# Construct the processing instruction for online preview.
image_process = 'doc/preview,export_1,print_1/watermark,text_5YaF6YOo6LWE5paZ,size_30,t_60'

# Generate a signed URL with processing parameters.
url = bucket.sign_url('GET', key, expire_time, params={'x-oss-process': image_process}, slash_safe=True)

# Print the signed URL.
print(url)

Go

Requer Go SDK 3.0.2 ou posterior (Instalar 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"
)

// Define global variables.
var (
	region     string // Storage region
	bucketName string // Bucket name
	objectName string // Object name
)

// The init function is used to initialize command line parameters.
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
	flag.StringVar(&objectName, "object", "", "The name of the object.")
}

func main() {
	// Parse command line parameters.
	flag.Parse()

	// Check if the bucket name is empty.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// Check if the region is empty.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// Check if the object name is empty.
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, object name required")
	}

	// Load the default configuration and set the credential provider and region.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region).
        // Specify your custom domain name. Example: http://static.example.com.
		WithEndpoint("http://static.example.com").
		WithUseCName(true)

	// Create an OSS client.
	client := oss.NewClient(cfg)

	// Generate a presigned URL for GetObject.
	result, err := client.Presign(context.TODO(), &oss.GetObjectRequest{
		Bucket:  oss.Ptr(bucketName),
		Key:     oss.Ptr(objectName),
        // Set document processing parameters.
		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("failed to get object presign %v", err)
	}

	log.Printf("request method:%v\n", result.Method)
	log.Printf("request expiration:%v\n", result.Expiration)
	log.Printf("request url:%v\n", result.URL)

	if len(result.SignedHeaders) > 0 {
		// If the returned result contains signed headers, include the corresponding request headers when you send a GET request using the signed URL. This prevents inconsistencies that may cause request failures and signature errors.
		log.Printf("signed headers:\n")
		for k, v := range result.SignedHeaders {
			log.Printf("%v: %v\n", k, v)
		}
	}
}

Node.js

Requer Node.js SDK 8.0 ou posterior (Instalação).

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

// Define a function to generate a signed URL.
async function generateSignatureUrl(fileName) {
  // Get the signed URL.
  const client = await new OSS({
    // Specify your custom domain name. Example: http://static.example.com.
    endpoint: 'http://static.example.com',
    // Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
    accessKeyId: process.env.OSS_ACCESS_KEY_ID,
    accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
    bucket: 'examplebucket',
    // Specify the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set Region to oss-cn-hangzhou.
    region: 'oss-cn-hangzhou',
    authorizationV4: true,
    cname: true
  });

  // Generate a signed URL that includes document processing parameters.
  return await client.signatureUrlV4('GET', 3600, {
    headers: {}, // Set the request headers based on the actual request you send.
    queries: {
      "x-oss-process": "doc/preview,export_1,print_1/watermark,text_5YaF6YOo6LWE5paZ,size_30,t_60" // Add document processing parameters.
    }
  }, fileName);
}

// Call the function and pass the file name.
generateSignatureUrl('yourFileName').then(url => {
  console.log('Generated Signature URL:', url);
}).catch(err => {
  console.error('Error generating signature URL:', err);
});

PHP

Requer PHP SDK 2.7.0 ou posterior (Instalação).

<?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;

// Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
$provider = new EnvironmentVariableCredentialsProvider();
// Specify your custom domain name. Example: http://static.example.com.
$endpoint = "http://static.example.com";
// Specify the bucket name. Example: examplebucket.
$bucket= "examplebucket";
// If the document is in the root directory of the bucket, specify the document name. If the document is not in the root directory, specify the full path of the document. Example: 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);

// Generate a signed URL that includes processing parameters. The URL is valid for 3600 seconds and can be accessed directly in a browser.
$timeout = 3600;

$options = array(
    // Construct the processing instruction for online preview.
    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);

Exemplo de URL assinada:

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

Abra esta URL no navegador para visualizar o documento.

Parâmetros

Ação: doc/preview

Os seguintes parâmetros são compatíveis.

Parâmetro

Tipo

Obrigatório

Descrição

print

int

Não

Define se a impressão é permitida. Valores válidos:

  • 1: Permitir.

  • 0: Não permitir.

copy

int

Não

Define se a cópia é permitida. Valores válidos:

  • 1: Permitir.

  • 0: Não permitir.

export

int

Não

Define se a exportação para PDF é permitida. Valores válidos:

  • 1: Permitir.

  • 0: Não permitir.

maxpage

int

Não

Número máximo de páginas a serem renderizadas. O valor deve ser um número inteiro maior que 0.

watermark

string

Não

Parâmetros de marca d'água.

text

string

Não

Texto da marca d'água, codificado em Base64 seguro para URL conforme a especificação de Codificação de marca d'água. Utilize um codificador base64url.

Nó pai: watermark

size

int

Não

Tamanho da fonte do texto da marca d'água. O valor deve ser um número inteiro maior que 0.

Nó pai: watermark

t

int

Não

Transparência do texto da marca d'água. Valores válidos: 0 a 100. Valor padrão: 100 (opaco).

Nó pai: watermark

color

string

Não

Cor do texto da marca d'água. O valor é uma cor RGB. Valor padrão: #FFFFFF.

Exemplos: #000000 indica preto e #FFFFFF indica branco.

Nó pai: watermark

rotate

int

Não

Ângulo de rotação horária do texto. Valores válidos: 0 a 360. Valor padrão: 0 (sem rotação).

Nó pai: watermark

type

string

Não

Fonte da marca d'água, codificada em Base64 seguro para URL conforme a especificação de Codificação de marca d'água. Utilize um codificador base64url.

As seguintes fontes são compatíveis:

  • Fontes chinesas:

    • Song Ti (padrão)

    • Kai Ti

  • Fontes inglesas:

    • Arial

    • Georgia

    • Tahoma

    • Comic Sans MS

    • Times New Roman

    • Courier New, Verdana

Nó pai: watermark

Operações de API relacionadas

Os exemplos de SDK acima encapsulam chamadas à API REST. Para acesso direto à API, calcule a assinatura manualmente usando a Assinatura V4 (recomendado).

Informações de visualize

  • Documento para visualize: example.docx

  • Páginas para visualize: As primeiras 3 páginas do documento

  • Informações de marca d'água para as páginas de visualize:

    • Tipo de marca d'água: Marca d'água de texto

    • Texto da marca d'água: Material Interno

    • Tamanho da fonte: 30

    • Transparência: 60

  • Permissões para as páginas de visualize: Permitir que usuários copiem, exportem e imprimam

Exemplo de processamento

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

Permissões

Uma conta Alibaba Cloud possui permissões totais por padrão. Usuários e funções RAM não têm permissões e devem receber acesso concedido pelo proprietário da conta ou administrador por meio de uma política RAM ou política de bucket.

Operação de API

Ação

Descrição

GetObject

oss:GetObject

Baixar um objeto

oss:GetObjectVersion

Necessário quando você especifique um versionId para baixar uma versão específica do objeto.

kms:Decrypt

Necessário quando os metadados do objeto contêm X-Oss-Server-Side-Encryption: KMS.

Operação de API

Ação

Descrição

Nenhuma

oss:ProcessImm

Usar o IMM através do OSS para processamento de dados.

Operação de API

Ação

Descrição

GenerateWebofficeToken

imm:GenerateWebofficeToken

Obter uma credencial do WebOffice.

RefreshWebofficeToken

imm:RefreshWebofficeToken

Atualizar uma credencial do WebOffice.

Faturamento

A visualize online com WebOffice gera as seguintes cobranças. As tarifas estão listadas em Preços do OSS e Itens faturáveis.

API

Item faturável

Descrição

GetObject

Solicitações GET

Taxas de solicitação são cobradas com base no número de solicitações bem-sucedidas.

Tráfego de saída pela Internet

Ao chamar a operação GetObject usando um endpoint público, como oss-cn-hangzhou.aliyuncs.com, ou um endpoint de aceleração, como oss-accelerate.aliyuncs.com, taxas de tráfego de saída pela Internet são cobradas com base no tamanho dos dados.

Recuperação de objetos IA

Se objetos IA forem recuperados, taxas de recuperação de dados IA são cobradas com base no tamanho dos dados IA recuperados.

Recuperação de objetos Archive em um bucket com acesso em tempo real ativado

Ao recuperar objetos Archive em um bucket com acesso em tempo real ativado, taxas de recuperação de dados Archive são cobradas com base no tamanho dos objetos Archive recuperados.

Taxas de aceleração de transferência

Se você ativar a aceleração de transferência e usar um endpoint de aceleração para acessar seu bucket, taxas de aceleração de transferência serão cobradas com base no tamanho dos dados.

API

Item faturável

Descrição

GenerateWebofficeToken

DocumentWebofficePreview

Taxas de processamento de documentos são cobradas com base no número de chamadas de API.

Importante

A cobrança pela visualize online de um documento é baseada no número de vezes que o documento é aberto para projetos criados antes de 1º de dezembro de 2023, e no número de chamadas de API para projetos criados a partir dessa data.

RefreshWebofficeToken

FAQ

É possível visualizar animações e vídeos em PPTs dinâmicos?

Sim. O tamanho máximo de arquivo compatível é 200 MB.

É possível visualizar arquivos de imagem?

Não. A visualize online com WebOffice não aceita arquivos de imagem.

Após ativar o CDN, um erro é reportado ao gerar uma URL assinada para um documento: Either the Signature query string parameter or the Authorization header should be specified, not both.

Quando a busca na origem está ativada para um bucket privado com um projeto IMM vinculado, o acesso pelo domínio CDN não requer assinaturas adicionais. Configure da seguinte forma:

  1. Conceda as permissões oss:ProcessImm, imm:GenerateWebofficeToken e imm:RefreshWebofficeToken à função padrão do CDN AliyunCDNAccessingPrivateOSSRole.

  2. Acesse o recurso usando uma URL que não contenha informações de assinatura.

    Por exemplo, use uma URL no seguinte formato para utilizar o recurso de visualize online de documentos: http://cdn.example.info/demo.ppt?x-oss-process=doc/preview,export_1,print_1