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 |
|
|
|
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
No OSS, crie um bucket, faça upload do documento Office para o bucket e vincule um projeto do Intelligent Media Management (IMM) ao bucket. O projeto IMM deve estar na mesma região do bucket.
-
Vincule um nome de domínio personalizado ao nome de domínio padrão do bucket. A visualize dos arquivos só é possível quando acessada pelo nome de domínio personalizado.
NotaSe você encontrar um erro de lista de permissões do WebView, entre em contato com o suporte do IMM pelo grupo DingTalk 88490020073. Forneça seu arquivo de validação de domínio confiável do WeChat para configuração da lista de permissões.
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(®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
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 |
|
|
int |
Não |
Define se a impressão é permitida. Valores válidos:
|
|
copy |
int |
Não |
Define se a cópia é permitida. Valores válidos:
|
|
export |
int |
Não |
Define se a exportação para PDF é permitida. Valores válidos:
|
|
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:
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 |
|
Baixar um objeto |
|
|
Necessário quando você especifique um versionId para baixar uma versão específica do objeto. |
|
|
|
Necessário quando os metadados do objeto contêm X-Oss-Server-Side-Encryption: KMS. |
|
Operação de API |
Ação |
Descrição |
|
Nenhuma |
|
Usar o IMM através do OSS para processamento de dados. |
|
Operação de API |
Ação |
Descrição |
|
GenerateWebofficeToken |
|
Obter uma credencial do WebOffice. |
|
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:
Conceda as permissões
oss:ProcessImm,imm:GenerateWebofficeTokeneimm:RefreshWebofficeTokenà função padrão do CDNAliyunCDNAccessingPrivateOSSRole.-
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