Tous les produits
Search
Centre de documentation

Object Storage Service:Édition en ligne WebOffice

Dernière mise à jour :Aug 18, 2026

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

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(&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 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

print

int

Non

Indique si l'impression est autorisée. Valeurs possibles :

  • 1 : autorise l'impression.

  • 0 : interdit l'impression. Il s'agit de la valeur par défaut.

export

int

Non

Indique si l'exportation au format PDF est autorisée. Valeurs possibles :

  • 1 : autorise l'exportation au format PDF.

  • 0 : interdit l'exportation au format PDF. Il s'agit de la valeur par défaut.

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 :

  • Polices chinoises :

    • Song Ti (par défaut)

    • Kai Ti

  • Polices anglaises :

    • Arial

    • Georgia

    • Tahoma

    • Comic Sans MS

    • Times New Roman

    • Courier New, Verdana

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

oss:GetObject

Requis pour télécharger un objet.

oss:GetObjectVersion

Requis lorsque vous téléchargez une version spécifique d'un objet à l'aide du paramètre versionId.

kms:Decrypt

Requis si l'objet est chiffré à l'aide de SSE-KMS.

API

Action

Description

S/O

oss:ProcessImm

Requis pour traiter les données à l'aide d'IMM via OSS.

API

Action

Description

GenerateWebofficeToken

imm:GenerateWebofficeToken

Requis pour obtenir les informations d'identification WebOffice.

RefreshWebofficeToken

imm: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