Todos os produtos
Search
Central de documentação

Object Storage Service:WebOffice online editing

Última atualização: Jul 03, 2026

A edição online do WebOffice permite editar documentos do Word, apresentações do PowerPoint e planilhas do Excel diretamente no navegador.

Casos de uso

  • Plataformas de escritório colaborativo: permitem que vários usuários editem o mesmo documento em tempo real.

  • Sistemas de gerenciamento de conteúdo: habilitam a edição online de documentos para criar, ler, atualizar e excluir arquivos diretamente no sistema.

  • Plataformas educacionais: facilitam o envio de tarefas pelos alunos e a criação de materiais didáticos pelos professores, além de salvar documentos na nuvem para simplificar o acesso e o compartilhamento.

Tipos de arquivo compatíveis

Tipo de arquivo

Extensões

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

Observações de uso

  • Evite acessar objetos do OSS entre regiões diferentes. Por exemplo, se um arquivo estiver armazenado em um bucket na região de Singapura, mas a solicitação partir da China continental, as condições de rede transfronteiriça podem degradar a qualidade do link. Isso pode aumentar a latência, causar falhas na visualização ou gerar conexões instáveis, afetando a estabilidade da rede e a experiência do usuário. Para obter o melhor desempenho, garanta que o cliente e o bucket estejam na mesma região.

  • A edição online do WebOffice oferece suporte apenas ao processamento síncrono por meio do parâmetro x-oss-process.

Como usar

Pré-requisitos

Gerar uma URL de edição

Java

Este exemplo requer o Alibaba Cloud SDK for Java 3.17.4 ou posterior. Para mais informações sobre como instalar o SDK, consulte 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 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 configured.
        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, for China (Hangzhou), set the region to cn-hangzhou.
        String region = "cn-hangzhou";
        // Create an OSSClient instance.
        // Call the shutdown method to release resources when the OSSClient instance is no longer needed.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        // Set supportCname to true to enable CNAME.
        clientBuilderConfiguration.setSupportCname(true);
        // Explicitly declare that Signature Version 4 is used.
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // Specify document processing parameters.
            String style = "doc/edit,export_1,print_1/watermark,text_5YaF6YOo6LWE5paZ,size_30,t_60";
            // Set the expiration time of the signed URL to 3,600 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

Este exemplo requer o Alibaba Cloud SDK for Python 2.18.4 ou posterior. Para mais informações sobre como instalar o SDK, consulte Instalação (Python SDK V1).

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

# Obtain 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 configured.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# Specify the bucket name.
bucket_name = 'examplebucket'

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

# Specify the Alibaba Cloud region ID.
region = 'cn-hangzhou'
# Initialize the bucket using the custom domain name.
bucket = oss2.Bucket(auth, endpoint, bucket_name, is_cname=True, region=region)

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

# Specify the expiration time in seconds.
expire_time = 3600

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

# Generate a signed URL that contains 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

Este exemplo requer o Alibaba Cloud SDK for Go 3.0.2 ou posterior. Para mais informações sobre como instalar o SDK, consulte Instalar o 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 // The region.
	bucketName string // The bucket name.
	objectName string // The 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 whether the bucket name is empty.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

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

	// Check whether 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),
        // Specify document processing parameters.
		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("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 response includes signed headers, you must include them in the GET request that uses the signed URL to prevent signature mismatch errors.
		log.Printf("signed headers:\n")
		for k, v := range result.SignedHeaders {
			log.Printf("%v: %v\n", k, v)
		}
	}
}

Node.js

Este exemplo requer o Alibaba Cloud SDK for Node.js 8,0 ou posterior. Para mais informações sobre como instalar o SDK, consulte Instalação (Node.js SDK).

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

// Define a function to generate a signed URL.
async function generateSignatureUrl(fileName) {
  // Obtain the signed URL.
  const client = await new OSS({
    // Specify your custom domain name. Example: http://static.example.com.
    endpoint: 'http://static.example.com',
    // Obtain 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 configured.
    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, for China (Hangzhou), set the region to oss-cn-hangzhou.
    region: 'oss-cn-hangzhou',
    authorizationV4: true,
    cname: true
  });

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

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

PHP

Este exemplo requer o Alibaba Cloud SDK for PHP 2.7.0 ou posterior. Para mais informações sobre como instalar o SDK, consulte Instalação (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;

// Obtain 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 configured.
$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 only the document name. Otherwise, specify the full path. 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 contains processing parameters. The URL is valid for 3,600 seconds and can be directly accessed in a browser.
$timeout = 3600;

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

Veja a seguir um exemplo de URL assinada gerada:

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

Copie a URL gerada na barra de endereços do navegador e pressione Enter para abrir o documento para edição.

Parâmetros

Ação: doc/edit

A tabela a seguir descreve os parâmetros.

Parâmetro

Tipo

Obrigatório

Descrição

print

int

Não

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

  • 1: permitir impressão.

  • 0: não permitir impressão. Este é o valor padrão.

export

int

Não

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

  • 1: permitir exportação para PDF.

  • 0: não permitir exportação para PDF. Este é o valor padrão.

watermark

string

Não

Os parâmetros da marca d'água.

text

string

Não

O texto da marca d'água. O valor deve ser codificado em Base64 seguro para URL. Para mais informações, consulte Codificação de marca d'água. Recomendamos o uso de um codificador base64url.

Pai: watermark

size

int

Não

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

Pai: watermark

t

int

Não

A opacidade do texto da marca d'água. Valores válidos: 0 a 100. Valor padrão: 100.

Pai: watermark

color

string

Não

A cor do texto da marca d'água, especificada como um valor hexadecimal RGB. O valor padrão é #FFFFFF.

Exemplo: #000000 para preto e #FFFFFF para branco.

Pai: watermark

rotate

int

Não

O ângulo de rotação no sentido horário. Valores válidos: 0 a 360. Valor padrão: 0.

O valor padrão é 0, indicando nenhuma rotação.

Pai: watermark

type

string

Não

A fonte do texto da marca d'água. O valor deve ser codificado em Base64 seguro para URL. Para mais informações, consulte Codificação de marca d'água. Recomendamos o uso de um codificador base64url.

As seguintes fontes são compatíveis:

  • Fontes chinesas:

    • Song Ti (padrão)

    • Kai Ti

  • Fontes em inglês:

    • Arial

    • Georgia

    • Tahoma

    • Comic Sans MS

    • Times New Roman

    • Courier New, Verdana

Pai: watermark

Referência da API

As operações anteriores utilizam SDKs. Para maior personalização, faça solicitações diretas à API REST, o que exige o cálculo manual da assinatura. Para obter informações sobre como calcular o cabeçalho de solicitação Authorization, consulte Assinatura Versão 4 (recomendado).

Cenário de exemplo

  • Documento a ser editado: example.docx

  • Informações da marca d'água para a página de edição:

    • Tipo de marca d'água: Texto

    • Texto da marca d'água: Material Interno

    • Tamanho da fonte da marca d'água: 30

    • Opacidade da marca d'água: 60

  • Permissões para a página de edição: permitir exportação e impressão

Exemplo de solicitação

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

Permissões

Por padrão, uma conta Alibaba Cloud tem todas as permissões. Usuários RAM e funções RAM não têm permissões por padrão. Uma conta Alibaba Cloud ou um usuário RAM com direitos administrativos deve conceder permissões a eles por meio de uma política do RAM ou de uma política de bucket.

API

Ação

Descrição

GetObject

oss:GetObject

Necessário para baixar um objeto.

oss:GetObjectVersion

Necessário ao baixar uma versão específica do objeto usando o parâmetro versionId.

kms:Decrypt

Necessário se o objeto estiver criptografado usando SSE-KMS.

API

Ação

Descrição

N/A

oss:ProcessImm

Necessário para processar dados usando o IMM por meio do OSS.

API

Ação

Descrição

GenerateWebofficeToken

imm:GenerateWebofficeToken

Necessário para obter credenciais do WebOffice.

RefreshWebofficeToken

imm:RefreshWebofficeToken

Necessário para renovar credenciais do WebOffice.

Faturamento

A edição online do WebOffice gera cobranças para os seguintes itens faturáveis. Para detalhes de preços, consulte 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 a aceleração de transferência estiver ativada e um endpoint de aceleração for usado para acessar o bucket, taxas de aceleração de transferência serão cobradas com base no tamanho dos dados.

API

Item faturável

Descrição

GenerateWebofficeToken

DocumentWebofficeEdit

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

Importante

A cobrança pela edição 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 nesta data ou posteriormente.

RefreshWebofficeToken