Todos los productos
Search
Centro de documentos

Object Storage Service:WebOffice online preview

Última actualización: Sep 03, 2026

Previsualice archivos de Word, PPT y Excel directamente en el navegador con WebOffice, sin necesidad de descargarlos.

Casos de uso

  • Bases de conocimiento corporativas o sistemas de gestión documental: cargue y convierta archivos a formato web para una visualización rápida y segura sin descargas.

  • Plataformas de educación en línea: consulte materiales del curso, notas de clase y tareas en tiempo real para mejorar la colaboración.

  • Herramientas de colaboración y gestión de proyectos: visualice planes compartidos, diseños e informes directamente en el navegador.

Tipos de archivo compatibles

Tipo de archivo

Extensión de archivo

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

Notas de uso

  • No se recomienda el acceso entre regiones. Previsualizar un objeto desde una región diferente puede causar alta latencia, fallos en la vista previa o conexiones inestables. Para obtener el mejor rendimiento y estabilidad, acceda a los buckets desde su propia región.

  • La vista previa en línea de WebOffice solo admite procesamiento síncrono con el parámetro x-oss-process.

Cómo utilizarlo

Requisitos previos

Generar una URL de vista previa

Java

Requiere Java SDK 3.17.4 o posterior (Installation).

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

Requiere Python SDK 2.18.4 o posterior (Installation (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

Requiere Go SDK 3.0.2 o posterior (Install 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

Requiere Node.js SDK 8.0 o posterior (Installation).

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

Requiere PHP SDK 2.7.0 o posterior (Installation).

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

Ejemplo de URL firmada:

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 en un navegador para previsualizar el documento.

Parámetros

Acción: doc/preview

Se admiten los siguientes parámetros.

Parámetro

Tipo

Obligatorio

Descripción

print

int

No

Especifica si se permite la impresión. Valores válidos:

  • 1: Permitir.

  • 0: No permitir.

copy

int

No

Especifica si se permite copiar. Valores válidos:

  • 1: Permitir.

  • 0: No permitir.

export

int

No

Especifica si se permite exportar a PDF. Valores válidos:

  • 1: Permitir.

  • 0: No permitir.

maxpage

int

No

Número máximo de páginas para procesar. El valor debe ser un entero mayor que 0.

watermark

string

No

Parámetros de marca de agua.

text

string

No

Texto de la marca de agua, codificado en Base64 seguro para URL según la especificación Watermark encoding. Utilice un codificador base64url.

Nodo padre: watermark

size

int

No

Tamaño de fuente del texto de la marca de agua. El valor debe ser un entero mayor que 0.

Nodo padre: watermark

t

int

No

Transparencia del texto de la marca de agua. Valores válidos: de 0 a 100. Valor predeterminado: 100 (opaco).

Nodo padre: watermark

color

string

No

Color del texto de la marca de agua. El valor es un código de color RGB. Valor predeterminado: #FFFFFF.

Ejemplos: #000000 indica negro y #FFFFFF indica blanco.

Nodo padre: watermark

rotate

int

No

Ángulo de rotación del texto en sentido horario. Valores válidos: de 0 a 360. Valor predeterminado: 0 (sin rotación).

Nodo padre: watermark

type

string

No

Fuente de la marca de agua, codificada en Base64 seguro para URL según la especificación Watermark encoding. Utilice un codificador base64url.

Se admiten las siguientes fuentes:

  • Fuentes chinas:

    • Song Ti (predeterminada)

    • Kai Ti

  • Fuentes en inglés:

    • Arial

    • Georgia

    • Tahoma

    • Comic Sans MS

    • Times New Roman

    • Courier New, Verdana

Nodo padre: watermark

Operaciones de API relacionadas

Los ejemplos de SDK anteriores encapsulan llamadas a la API REST. Para acceder directamente a la API, calcule la firma manualmente mediante Signature V4 (recommended).

Información de vista previa

  • Documento a previsualizar: example.docx

  • Páginas a previsualizar: las primeras 3 páginas del documento

  • Información de marca de agua para las páginas de vista previa:

    • Tipo de marca de agua: marca de agua de texto

    • Texto de la marca de agua: Material interno

    • Tamaño de fuente: 30

    • Transparencia: 60

  • Permisos para las páginas de vista previa: permitir a los usuarios copiar, exportar e imprimir

Ejemplo de procesamiento

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

Permisos

Una cuenta de Alibaba Cloud tiene todos los permisos de forma predeterminada. Los usuarios y roles de RAM no tienen permisos y deben recibir acceso por parte del propietario de la cuenta o un administrador mediante una RAM policy o bucket policy.

Operación de API

Acción

Descripción

GetObject

oss:GetObject

Descargar un objeto

oss:GetObjectVersion

Obligatorio cuando se especifica un versionId para descargar una versión específica del objeto.

kms:Decrypt

Obligatorio cuando los metadatos del objeto contienen X-Oss-Server-Side-Encryption: KMS.

Operación de API

Acción

Descripción

Ninguna

oss:ProcessImm

Usar IMM a través de OSS para el procesamiento de datos.

Operación de API

Acción

Descripción

GenerateWebofficeToken

imm:GenerateWebofficeToken

Obtener una credencial de WebOffice.

RefreshWebofficeToken

imm:RefreshWebofficeToken

Actualizar una credencial de WebOffice.

Facturación

La vista previa en línea de WebOffice genera los siguientes cargos. Las tarifas se detallan en Precios de OSS y Billable items.

API

Concepto facturable

Descripción

GetObject

Solicitudes GET

Se le cobran tarifas de solicitud según el número de solicitudes exitosas.

Tráfico de salida a Internet

Si llama a la operación GetObject mediante un endpoint público, como oss-cn-hangzhou.aliyuncs.com, o un endpoint de aceleración, como oss-accelerate.aliyuncs.com, se le cobran tarifas por tráfico de salida a Internet según el tamaño de los datos.

Recuperación de objetos IA

Si se recuperan objetos IA, se le cobran tarifas de recuperación de datos IA según el tamaño de los datos IA recuperados.

Recuperación de objetos Archive en un bucket con acceso en tiempo real habilitado

Si recupera objetos Archive en un bucket con acceso en tiempo real habilitado, se le cobran tarifas de recuperación de datos Archive según el tamaño de los objetos Archive recuperados.

Tarifas de aceleración de transferencia

Si habilita la aceleración de transferencia y usa un endpoint de aceleración para acceder a su bucket, se le cobran tarifas de aceleración de transferencia según el tamaño de los datos.

API

Concepto facturable

Descripción

GenerateWebofficeToken

DocumentWebofficePreview

Se le cobran tarifas de procesamiento de documentos según el número de llamadas a la API.

Importante

La vista previa en línea de un documento se cobra según el número de veces que se abre el documento para proyectos creados antes del 1 de diciembre de 2023, y según el número de llamadas a la API para proyectos creados a partir de esa fecha.

RefreshWebofficeToken

Preguntas frecuentes

¿Puedo previsualizar animaciones y videos en presentaciones PPT dinámicas?

Sí. El tamaño máximo de archivo compatible es de 200 MB.

¿Puedo previsualizar archivos de imagen?

No. La vista previa en línea de WebOffice no admite archivos de imagen.

Después de habilitar CDN, se reporta un error al generar una URL firmada para un documento: Either the Signature query string parameter or the Authorization header should be specified, not both.

Cuando la recuperación de origen está habilitada para un bucket privado con un proyecto de IMM vinculado, el acceso al dominio de CDN no requiere firmas adicionales. Configure lo siguiente:

  1. Debe otorgar los permisos oss:ProcessImm, imm:GenerateWebofficeToken y imm:RefreshWebofficeToken al rol predeterminado de CDN AliyunCDNAccessingPrivateOSSRole.

  2. Acceda al recurso mediante una URL que no contenga información de firma.

    Por ejemplo, puede usar una URL con el siguiente formato para utilizar la función de vista previa de documentos en línea: http://cdn.example.info/demo.ppt?x-oss-process=doc/preview,export_1,print_1