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
No OSS, crie um bucket, faça upload do documento do Office que você deseja editar para o bucket e vincule um projeto do Intelligent Media Management (IMM) ao bucket. O projeto do IMM deve estar na mesma região do bucket.
-
Você deve acessar o OSS usando um nome de domínio personalizado.
NotaSe você vir uma mensagem informando que o nome de domínio não está na lista de permissões do WebView do mini programa, entre em contato com o suporte técnico do Intelligent Media Management (IMM) pelo grupo do DingTalk (ID: 88490020073). A equipe de suporte atualizará a lista de permissões usando o arquivo de validação de domínio confiável do WeChat fornecido por você.
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(®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 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 |
int | Não | Define se a impressão é permitida. Valores válidos:
| |
export | int | Não | Define se a exportação para PDF é permitida. Valores válidos:
|
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:
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 |
| Necessário para baixar um objeto. |
| Necessário ao baixar uma versão específica do objeto usando o parâmetro | |
| Necessário se o objeto estiver criptografado usando SSE-KMS. |
|
API |
Ação |
Descrição |
|
N/A |
|
Necessário para processar dados usando o IMM por meio do OSS. |
|
API |
Ação |
Descrição |
|
GenerateWebofficeToken |
|
Necessário para obter credenciais do WebOffice. |
|
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 |