WebOffice を使用すると、ファイルをダウンロードすることなく、ブラウザで直接 Word、PPT、Excel ドキュメントをプレビューできます。
シナリオ
企業のナレッジベースまたはドキュメント管理システム: 従業員はファイルをアップロードし、Web フォーマットに変換してすばやく表示できます。これにより、情報アクセスの効率とセキュリティが向上します。
オンライン教育プラットフォーム: 教師と生徒は、教材、講義ノート、課題をリアルタイムで表示できます。これにより、インタラクションと学習体験が向上します。
コラボレーションおよびプロジェクト管理ツール: チームメンバーは、共有された作業計画、設計ドラフト、レポートをブラウザで直接表示できます。これにより、チームのコラボレーションが向上します。
サポートされているファイルタイプ
ファイルタイプ | ファイル拡張子 |
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 |
使用方法
前提条件
OSS で、バケットを作成し、Office ドキュメントをバケットにアップロードし、Intelligent Media Management (IMM) プロジェクトをバケットにアタッチします。IMM プロジェクトは、バケットと同じリージョンにある必要があります。
カスタムドメイン名をバケットのデフォルトドメイン名にアタッチします。ファイルは、カスタムドメイン名を通じてアクセスされた場合にのみプレビューできます。
説明ドメイン名がミニアプリの WebView ホワイトリストに設定されていないというプロンプトが表示された場合は、DingTalk グループ (ID: 88490020073) を通じて Intelligent Media Management ヘルプデスクにお問い合わせください。ヘルプデスクは、提供された WeChat 信頼ドメイン検証ファイルに基づいてホワイトリストを設定します。
プレビューを有効にする URL の取得
Java
Java SDK 3.17.4 以降を使用します。インストール手順については、「インストール」をご参照ください。
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 {
// カスタムドメイン名を指定します。例: http://static.example.com。
String endpoint = "http://static.example.com";
// 環境変数からアクセス資格情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// バケット名を指定します。例: examplebucket。
String bucketName = "examplebucket";
// オブジェクトの完全なパスを指定します。オブジェクトがバケットのルートディレクトリにない場合は、完全なパスを指定する必要があります。
String objectName = "exampledir/exampleobject.docx";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
String region = "cn-hangzhou";
// OSSClient インスタンスを作成します。
// OSSClient インスタンスが不要になったら、shutdown メソッドを呼び出してリソースを解放します。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
// 注: 値を true に設定して CNAME オプションを有効にします。
clientBuilderConfiguration.setSupportCname(true);
// V4 署名アルゴリズムの使用を明示的に宣言します。
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// ドキュメント処理パラメーター。
String style = "doc/preview,export_1,print_1/watermark,text_5YaF6YOo6LWE5paZ,size_30,t_60";
// 署名付き URL の有効期限を 3600 秒に設定します。
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("OSSException がキャッチされました。これは、リクエストが OSS に到達したものの、何らかの理由でエラー応答で拒否されたことを意味します。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエスト ID:" + oe.getRequestId());
System.out.println("ホスト ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("ClientException がキャッチされました。これは、クライアントが OSS との通信中に、ネットワークにアクセスできないなどの深刻な内部問題に遭遇したことを意味します。");
System.out.println("エラーメッセージ:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}Python
Python SDK 2.18.4 以降を使用します。インストール手順については、「インストール (Python SDK V1)」をご参照ください。
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 環境変数からアクセス資格情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケット名を指定します。
bucket = 'examplebucket'
# カスタムドメイン名を指定します。例: https://static.example.com。
endpoint = 'https://static.example.com'
# 汎用 Alibaba Cloud リージョン ID を指定します。
region = 'cn-hangzhou'
# カスタムドメイン名を使用してバケットを初期化します。
bucket = oss2.Bucket(auth, endpoint, bucket, is_cname=True, region=region)
# 処理するファイルを指定します。
key = 'example.docx'
# 有効期限を秒単位で指定します。
expire_time = 3600
# オンラインプレビューの処理命令を構築します。
image_process = 'doc/preview,export_1,print_1/watermark,text_5YaF6YOo6LWE5paZ,size_30,t_60'
# 処理パラメーターを含む署名付き URL を生成します。
url = bucket.sign_url('GET', key, expire_time, params={'x-oss-process': image_process}, slash_safe=True)
# 署名付き URL を出力します。
print(url)Go
Go SDK 3.0.2 以降を使用します。インストール手順については、「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"
)
// グローバル変数を定義します。
var (
region string // ストレージリージョン
bucketName string // バケット名
objectName string // オブジェクト名
)
// init 関数は、コマンドラインパラメーターを初期化するために使用されます。
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() {
// コマンドラインパラメーターを解析します。
flag.Parse()
// バケット名が空かどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// リージョンが空かどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// オブジェクト名が空かどうかを確認します。
if len(objectName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, object name required")
}
// デフォルト設定をロードし、資格情報プロバイダーとリージョンを設定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region).
// カスタムドメイン名を指定します。例: http://static.example.com。
WithEndpoint("http://static.example.com").
WithUseCName(true)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// GetObject の署名付き URL を生成します。
result, err := client.Presign(context.TODO(), &oss.GetObjectRequest{
Bucket: oss.Ptr(bucketName),
Key: oss.Ptr(objectName),
// ドキュメント処理パラメーターを設定します。
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 {
// 返された結果に署名付きヘッダーが含まれている場合は、署名付き URL を使用して GET リクエストを送信するときに対応するリクエストヘッダーを含めます。これにより、リクエストの失敗や署名エラーを引き起こす可能性のある不整合を防ぎます。
log.Printf("signed headers:\n")
for k, v := range result.SignedHeaders {
log.Printf("%v: %v\n", k, v)
}
}
}Node.js
Node.js SDK 8.0 以降を使用します。インストール手順については、「インストール」をご参照ください。
const OSS = require("ali-oss");
// 署名付き URL を生成する関数を定義します。
async function generateSignatureUrl(fileName) {
// 署名付き URL を取得します。
const client = await new OSS({
// カスタムドメイン名を指定します。例: http://static.example.com。
endpoint: 'http://static.example.com',
// 環境変数からアクセス資格情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
bucket: 'examplebucket',
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを oss-cn-hangzhou に設定します。
region: 'oss-cn-hangzhou',
authorizationV4: true,
cname: true
});
// ドキュメント処理パラメーターを含む署名付き URL を生成します。
return await client.signatureUrlV4('GET', 3600, {
headers: {}, // 実際に送信するリクエストに基づいてリクエストヘッダーを設定します。
queries: {
"x-oss-process": "doc/preview,export_1,print_1/watermark,text_5YaF6YOo6LWE5paZ,size_30,t_60" // ドキュメント処理パラメーターを追加します。
}
}, fileName);
}
// 関数を呼び出してファイル名を渡します。
generateSignatureUrl('yourFileName').then(url => {
console.log('Generated Signature URL:', url);
}).catch(err => {
console.error('Error generating signature URL:', err);
});
PHP
PHP SDK 2.7.0 以降を使用します。インストール手順については、「インストール」をご参照ください。
<?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;
// 環境変数からアクセス資格情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
$provider = new EnvironmentVariableCredentialsProvider();
// カスタムドメイン名を指定します。例: http://static.example.com。
$endpoint = "http://static.example.com";
// バケット名を指定します。例: examplebucket。
$bucket= "examplebucket";
// ドキュメントがバケットのルートディレクトリにある場合は、ドキュメント名を指定します。ドキュメントがルートディレクトリにない場合は、ドキュメントの完全なパスを指定します。例: 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);
// 処理パラメーターを含む署名付き URL を生成します。URL は 3600 秒間有効で、ブラウザで直接アクセスできます。
$timeout = 3600;
$options = array(
// オンラインプレビューの処理命令を構築します。
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);以下は、生成された署名付き URL の例です。
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生成された URL をコピーし、ブラウザのアドレスバーに貼り付けて Enter キーを押し、WebOffice ドキュメントをプレビューします。
パラメーター
操作: doc/preview
次の表にパラメーターを示します。
パラメーター | タイプ | 必須 | 説明 |
int | いいえ | 印刷を許可するかどうかを指定します。有効な値:
| |
copy | int | いいえ | コピーを許可するかどうかを指定します。有効な値:
|
export | int | いいえ | PDF へのエクスポートを許可するかどうかを指定します。有効な値:
|
maxpage | int | いいえ | レンダリングする最大ページ数。値は 0 より大きい整数である必要があります。 |
watermark | string | いいえ | ウォーターマークパラメーター。 |
text | string | いいえ | ウォーターマークテキスト。テキストは URL セーフな Base64 でエンコードする必要があります。詳細については、「ウォーターマークのエンコーディング」をご参照ください。base64url エンコーダー を使用してエンコードすることをお勧めします。 親ノード: watermark |
size | int | いいえ | ウォーターマークテキストのフォントサイズ。値は 0 より大きい整数である必要があります。 親ノード: watermark |
t | int | いいえ | ウォーターマークテキストの透明度。有効な値: 0~100。デフォルト値: 100 (不透明)。 親ノード: watermark |
color | string | いいえ | ウォーターマークテキストの色。値は RGB カラー値です。デフォルト値: #FFFFFF。 例: #000000 は黒、#FFFFFF は白を示します。 親ノード: watermark |
rotate | int | いいえ | テキストの時計回りの回転角度。有効な値: 0~360。デフォルト値: 0 (回転なし)。 親ノード: watermark |
type | string | いいえ | テキストウォーターマークのフォント。フォントは URL セーフな Base64 でエンコードする必要があります。詳細については、「ウォーターマークのエンコーディング」をご参照ください。base64url エンコーダー を使用してエンコードすることをお勧めします。 次のフォントがサポートされています:
親ノード: watermark |
関連 API 操作
前述の操作は API 操作に基づいています。プログラムに高度なカスタマイズが必要な場合は、REST API リクエストを直接開始できます。これを行うには、署名を計算するコードを手動で記述する必要があります。Authorization 共通リクエストヘッダーの計算方法の詳細については、「署名 V4 (推奨)」をご参照ください。
プレビュー情報
プレビューするドキュメント: example.docx
プレビューするページ: ドキュメントの最初の 3 ページ
プレビューページのウォーターマーク情報:
ウォーターマークタイプ: テキストウォーターマーク
ウォーターマークテキスト: 内部資料
フォントサイズ: 30
透明度: 60
プレビューページの権限: ユーザーにコピー、エクスポート、印刷を許可
処理例
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権限
デフォルトでは、Alibaba Cloud アカウントはすべての権限を持っています。対照的に、Alibaba Cloud アカウントに関連付けられた Resource Access Management (RAM) ユーザーまたは RAM ロールは、デフォルトでは権限を持っていません。Alibaba Cloud アカウントのオーナーまたは管理者は、RAM ポリシーまたはバケットポリシーを使用して、RAM ユーザーまたは RAM ロールに権限を付与する必要があります。
API 操作 | アクション | 説明 |
GetObject |
| オブジェクトをダウンロードします。 |
| オブジェクトをダウンロードするときに versionId を使用してオブジェクトのバージョンを指定する場合、このアクションの権限が必要です。 | |
| オブジェクトをダウンロードするときにオブジェクトのメタデータに X-Oss-Server-Side-Encryption: KMS が含まれている場合、このアクションの権限が必要です。 |
API 操作 | アクション | 説明 |
なし |
| OSS を介して IMM を使用してデータ処理を行う権限。 |
API 操作 | アクション | 説明 |
GenerateWebofficeToken |
| Weboffice 資格情報を取得するために使用されます。 |
RefreshWebofficeToken |
| Weboffice 資格情報を更新するために使用されます。 |
課金
WebOffice オンラインプレビュー機能では、次の項目に対して料金が発生します。料金の詳細については、「OSS の料金」および「課金項目」をご参照ください。
API | 課金項目 | 説明 |
GetObject | GET リクエスト | 成功したリクエストの数に基づいてリクエスト料金が課金されます。 |
インターネット経由のアウトバウンドトラフィック | oss-cn-hangzhou.aliyuncs.com などのパブリックエンドポイント、または oss-accelerate.aliyuncs.com などのアクセラレーションエンドポイントを使用して GetObject 操作を呼び出す場合、データサイズに基づいてインターネット経由のアウトバウンドトラフィックの料金が課金されます。 | |
IA オブジェクトの取得 | IA オブジェクトが取得された場合、取得された IA データのサイズに基づいて IA データ取得料金が課金されます。 | |
リアルタイムアクセスが有効になっているバケット内のアーカイブオブジェクトの取得 | リアルタイムアクセスが有効になっているバケット内のアーカイブオブジェクトを取得する場合、取得されたアーカイブオブジェクトのサイズに基づいてアーカイブデータ取得料金が課金されます。 | |
転送アクセラレーション料金 | 転送アクセラレーションを有効にし、アクセラレーションエンドポイントを使用してバケットにアクセスする場合、データサイズに基づいて転送アクセラレーション料金が課金されます。 |
API | 課金項目 | 説明 |
GenerateWebofficeToken | DocumentWebofficePreview | API 呼び出しの数に基づいてドキュメント処理料金が課金されます。 重要 2023 年 12 月 1 日より前に作成されたプロジェクトの場合、ドキュメントがオンラインでプレビューされる料金はドキュメントが開かれた回数に基づいて課金され、この日付以降に作成されたプロジェクトの場合は API 呼び出しの数に基づいて課金されます。 |
RefreshWebofficeToken |
注意
WebOffice オンラインプレビューは、同期処理 (x-oss-process メソッド) のみをサポートします。
よくある質問
動的な PPT のアニメーションや動画をプレビューできますか?
はい、できます。ただし、オンラインプレビュー機能は最大 200 MB のドキュメントをサポートします。このサイズ制限を超えるドキュメントにはアクセスできません。
画像ファイルをプレビューできますか?
サポートされていません。
CDN を有効にした後、ドキュメントの署名付き URL を生成すると、Signature クエリ文字列パラメーターまたは Authorization ヘッダーのいずれかを指定する必要があり、両方を指定することはできません。というエラーが報告されます
非公開バケットのオリジンフェッチを有効にし、CDN ドメイン名を使用して IMM プロジェクトにアタッチされているバケット内のファイルにアクセスする場合、追加の署名情報を提供する必要はありません。この問題を解決するには、次のように設定を構成します:
デフォルトの CDN ロール
AliyunCDNAccessingPrivateOSSRoleにoss:ProcessImm、imm:GenerateWebofficeToken、およびimm:RefreshWebofficeTokenの権限を付与する必要があります。署名情報を含まない URL を使用してリソースにアクセスします。
たとえば、次の形式の URL を使用して、オンラインドキュメントプレビュー機能を使用できます: http://cdn.example.info/demo.ppt?x-oss-process=doc/preview,export_1,print_1