L'édition en ligne WebOffice vous permet de modifier des documents Word, des présentations PowerPoint et des feuilles de calcul Excel directement dans un navigateur.
Cas d'utilisation
Plateformes collaboratives : permettez à plusieurs utilisateurs de modifier le même document en temps réel.
Systèmes de gestion de contenu : activez l'édition de documents en ligne pour créer, lire, mettre à jour et supprimer des fichiers directement au sein du système.
Plateformes éducatives : autorisez les étudiants à soumettre leurs devoirs ou les enseignants à créer des supports de cours, et enregistrez les documents sur le cloud pour un accès et un partage simplifiés.
Types de fichiers pris en charge
|
Type de fichier |
Extensions |
|
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 |
Notes d'utilisation
Évitez d'accéder aux objets OSS situés dans d'autres régions. Par exemple, si un fichier est stocké dans un bucket situé à Singapour mais que vous y accédez depuis la Chine continentale, les conditions réseau transfrontalières peuvent dégrader la qualité de la liaison. Cela peut entraîner une augmentation de la latence, des échecs de prévisualisation ou des connexions instables, ce qui affecte la stabilité du réseau et l'expérience utilisateur. Pour des performances optimales, assurez-vous que le client et le bucket se trouvent dans la même région.
L'édition en ligne WebOffice prend uniquement en charge le traitement synchrone via le paramètre
x-oss-process.
Utilisation
Prérequis
Dans OSS, créez un bucket, téléchargez le document Office que vous souhaitez modifier dans le bucket, et associez un projet Intelligent Media Management (IMM) au bucket. Le projet IMM doit se trouver dans la même région que le bucket.
-
Vous devez accéder à OSS en utilisant un nom de domaine personnalisé.
RemarqueSi vous voyez un message indiquant que le nom de domaine ne figure pas dans la liste d'autorisation WebView du mini-programme, contactez le support technique d'Intelligent Media Management (IMM) via le groupe DingTalk (ID : 88490020073). L'équipe de support mettra à jour la liste d'autorisation à l'aide du fichier de validation de domaine de confiance WeChat que vous fournissez.
Générer une URL d'édition
Java
Cet exemple nécessite Alibaba Cloud SDK for Java 3.17.4 ou une version ultérieure. Pour plus d'informations sur l'installation du SDK, consultez la section 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 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
Cet exemple nécessite Alibaba Cloud SDK for Python 2.18.4 ou une version ultérieure. Pour plus d'informations sur l'installation du SDK, consultez la section Installation (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
Cet exemple nécessite Alibaba Cloud SDK for Go 3.0.2 ou une version ultérieure. Pour plus d'informations sur l'installation du SDK, consultez la section 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 // 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
Cet exemple nécessite Alibaba Cloud SDK for Node.js 8.0 ou une version ultérieure. Pour plus d'informations sur l'installation du SDK, consultez la section Installation (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
Cet exemple nécessite Alibaba Cloud SDK for PHP 2.7.0 ou une version ultérieure. Pour plus d'informations sur l'installation du SDK, consultez la section Installation (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);
Voici un exemple d'URL signée générée :
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
Copiez l'URL générée dans la barre d'adresse de votre navigateur et appuyez sur Entrée pour ouvrir le document en mode édition.
Paramètres
Action : doc/edit
Le tableau suivant décrit les paramètres.
Paramètre | Type | Obligatoire | Description |
int | Non | Indique si l'impression est autorisée. Valeurs possibles :
| |
export | int | Non | Indique si l'exportation au format PDF est autorisée. Valeurs possibles :
|
watermark | string | Non | Les paramètres du filigrane. |
text | string | Non | Le texte du filigrane. La valeur doit être encodée en Base64 sécurisé pour les URL. Pour plus d'informations, consultez la section Encodage du filigrane. Nous vous recommandons d'utiliser un encodeur base64url. Parent : watermark |
size | int | Non | La taille de police du texte du filigrane. La valeur doit être un entier supérieur à 0. Parent : watermark |
t | int | Non | L'opacité du texte du filigrane. Valeurs possibles : 0 à 100. Valeur par défaut : 100. Parent : watermark |
color | string | Non | La couleur du texte du filigrane, spécifiée sous forme de valeur hexadécimale RVB. La valeur par défaut est #FFFFFF. Exemple : #000000 pour le noir et #FFFFFF pour le blanc. Parent : watermark |
rotate | int | Non | L'angle de rotation dans le sens horaire. Valeurs possibles : 0 à 360. Valeur par défaut : 0. La valeur par défaut est 0, ce qui indique qu'aucune rotation n'est appliquée. Parent : watermark |
type | string | Non | La police du texte du filigrane. La valeur doit être encodée en Base64 sécurisé pour les URL. Pour plus d'informations, consultez la section Encodage du filigrane. Nous vous recommandons d'utiliser un encodeur base64url. Les polices suivantes sont prises en charge :
Parent : watermark |
Référence API
Les opérations précédentes utilisent des SDK. Pour une personnalisation accrue, vous pouvez effectuer des requêtes REST API directes, ce qui nécessite de calculer manuellement la signature. Pour savoir comment calculer l'en-tête de requête Authorization, consultez la section Signature Version 4 (recommandé).
Scénario d'exemple
Document à modifier : example.docx
-
Informations sur le filigrane pour la page d'édition :
Type de filigrane : Texte
Texte du filigrane : Internal Material
Taille de police du filigrane : 30
Opacité du filigrane : 60
Autorisations pour la page d'édition : autoriser l'exportation et l'impression
Exemple de requête
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
Autorisations
Par défaut, un compte Alibaba Cloud dispose de toutes les autorisations. Par défaut, les utilisateurs RAM et les rôles RAM ne disposent d'aucune autorisation. Un compte Alibaba Cloud ou un utilisateur RAM disposant de droits administratifs doit leur accorder des autorisations à l'aide d'une politique RAM ou d'une politique de bucket.
API | Action | Description |
GetObject |
| Requis pour télécharger un objet. |
| Requis lorsque vous téléchargez une version spécifique d'un objet à l'aide du paramètre | |
| Requis si l'objet est chiffré à l'aide de SSE-KMS. |
|
API |
Action |
Description |
|
S/O |
|
Requis pour traiter les données à l'aide d'IMM via OSS. |
|
API |
Action |
Description |
|
GenerateWebofficeToken |
|
Requis pour obtenir les informations d'identification WebOffice. |
|
RefreshWebofficeToken |
|
Requis pour actualiser les informations d'identification WebOffice. |
Facturation
L'édition en ligne WebOffice entraîne des frais pour les éléments facturables suivants. Pour plus de détails sur les tarifs, consultez les pages Tarification OSS et Éléments facturables.
|
API |
Élément facturable |
Description |
|
GetObject |
Requêtes GET |
Des frais de requête vous sont facturés en fonction du nombre de requêtes abouties. |
|
Trafic sortant sur Internet |
Si vous appelez l'opération GetObject à l'aide d'un point de terminaison public, tel que oss-cn-hangzhou.aliyuncs.com, ou d'un point de terminaison d'accélération, tel que oss-accelerate.aliyuncs.com, des frais vous sont facturés pour le trafic sortant sur Internet en fonction de la taille des données. |
|
|
Récupération d'objets IA |
Si des objets IA sont récupérés, des frais de récupération de données IA vous sont facturés en fonction de la taille des données IA récupérées. |
|
|
Récupération d'objets Archive dans un bucket pour lequel l'accès en temps réel est activé |
Si vous récupérez des objets Archive dans un bucket pour lequel l'accès en temps réel est activé, des frais de récupération de données Archive vous sont facturés en fonction de la taille des objets Archive récupérés. |
|
|
Frais d'accélération du transfert |
Si vous activez l'accélération du transfert et utilisez un point de terminaison d'accélération pour accéder à votre bucket, des frais d'accélération du transfert vous sont facturés en fonction de la taille des données. |
|
API |
Élément facturable |
Description |
|
GenerateWebofficeToken |
DocumentWebofficeEdit |
Des frais de traitement de document vous sont facturés en fonction du nombre d'appels API. Important
L'édition en ligne d'un document est facturée en fonction du nombre de fois où le document est ouvert pour les projets créés avant le 1er décembre 2023, et en fonction du nombre d'appels API pour les projets créés à partir de cette date. |
|
RefreshWebofficeToken |