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 |
|
|
|
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
En OSS, create a bucket, upload the Office document al bucket y attach an Intelligent Media Management (IMM) project al bucket. El proyecto de IMM debe estar en la misma región que el bucket.
-
Attach a custom domain name to the default domain name of the bucket. Los archivos solo se pueden previsualizar cuando se accede a ellos mediante el nombre de dominio personalizado.
NotaSi aparece un error de lista de permitidos de WebView, póngase en contacto con el servicio de asistencia de IMM a través del grupo de DingTalk 88490020073. Proporcione su archivo de validación de dominio de confianza de WeChat para la configuración de la lista de permitidos.
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(®ion, "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 |
|
|
int |
No |
Especifica si se permite la impresión. Valores válidos:
|
|
copy |
int |
No |
Especifica si se permite copiar. Valores válidos:
|
|
export |
int |
No |
Especifica si se permite exportar a PDF. Valores válidos:
|
|
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:
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 |
|
Descargar un objeto |
|
|
Obligatorio cuando se especifica un versionId para descargar una versión específica del objeto. |
|
|
|
Obligatorio cuando los metadatos del objeto contienen X-Oss-Server-Side-Encryption: KMS. |
|
Operación de API |
Acción |
Descripción |
|
Ninguna |
|
Usar IMM a través de OSS para el procesamiento de datos. |
|
Operación de API |
Acción |
Descripción |
|
GenerateWebofficeToken |
|
Obtener una credencial de WebOffice. |
|
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:
Debe otorgar los permisos
oss:ProcessImm,imm:GenerateWebofficeTokenyimm:RefreshWebofficeTokenal rol predeterminado de CDNAliyunCDNAccessingPrivateOSSRole.-
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