文檔在線預(yù)覽
文檔在線預(yù)覽功能允許您在瀏覽器中直接預(yù)覽文檔內(nèi)容,無需下載文件。本文將介紹該功能的使用場景、前提條件、注意事項以及操作步驟,幫助您快速上手。
使用場景
企業(yè)知識庫或文檔管理系統(tǒng):員工可將文件上傳并轉(zhuǎn)化為網(wǎng)頁格式,方便快速查看,提升信息訪問效率和安全性。
在線教育平臺:教師和學(xué)生可以實時查看教材、講義和作業(yè),促進互動和學(xué)習(xí)體驗。
協(xié)同辦公與項目管理工具:團隊成員共享的工作計劃、設(shè)計稿和報告文檔可直接在瀏覽器中查看,提升團隊協(xié)作效率。
前提條件
已通過配額中心申請開啟新版本IMM Get和Post數(shù)據(jù)處理能力。
已綁定IMM Project。您可以通過OSS控制臺或API綁定IMM Project。
通過OSS控制臺綁定的具體操作,請參見步驟一:綁定IMM。
通過API綁定的具體操作,請參見AttachOSSBucket。
注意事項
文檔在線預(yù)覽僅支持同步處理(x-oss-process處理方式)。
不支持匿名訪問
必須擁有IMM處理所需的相關(guān)權(quán)限。更多信息,請參見權(quán)限。
如果使用OSS默認域名訪問文件,將下載文檔預(yù)覽HTML頁面。如果使用自定義域名文檔在線預(yù)覽操作需要您在OSS Bucket綁定自定義域名,通過自定義域名訪問文件時才能打開預(yù)覽。關(guān)于綁定自定義域名更多信息,請參見綁定自定義域名至Bucket默認域名。
參數(shù)說明
操作名稱:doc/preview
使用REST API預(yù)覽文檔時,可根據(jù)以下參數(shù)配置預(yù)覽效果。
參數(shù)名稱 | 類型 | 是否必須 | 描述 |
int | 否 | 是否允許打印。取值:
| |
copy | int | 否 | 是否允許復(fù)制。取值:
|
export | int | 否 | 是否允許導(dǎo)出為PDF。取值:
|
maxpage | int | 否 | 最大渲染頁數(shù),取大于0的整數(shù)。 |
watermark | string | 否 | 水印參數(shù)。 |
text | string | 否 | 水印文字。需經(jīng)過URL安全的Base64編碼。具體操作,請參見水印編碼。 父節(jié)點:watermark |
size | int | 否 | 水印文字字號,取大于0的整數(shù)。 父節(jié)點:watermark |
t | int | 否 | 水印文字透明度。取值范圍:0~100。 默認值:100,表示透明度100%(不透明)。 父節(jié)點:watermark |
color | string | 否 | 水印文字顏色,RGB顏色值,例如:#000000表示黑色,#FFFFFF表示白色。 默認值為#FFFFFF。 父節(jié)點:watermark |
rotate | int | 否 | 指定文字順時針旋轉(zhuǎn)角度。取值范圍:0~360。 默認值為0,表示不旋轉(zhuǎn)。 父節(jié)點:watermark |
type | string | 否 | 指定文字水印的字體,需經(jīng)過URL Safe的Base64編碼。具體操作,請參見水印編碼。 支持的字體如下:
父節(jié)點:watermark |
使用REST API
預(yù)覽信息
預(yù)覽文檔名稱:example.docx
預(yù)覽頁面:文檔前3頁
預(yù)覽頁面水印信息:
水印類型:文字水印
水印文字:內(nèi)部資料
水印字號:30號字體
水印透明度:60
預(yù)覽頁面權(quán)限信息:
允許用戶復(fù)制
允許用戶導(dǎo)出
允許用戶打印
處理示例
GET /exmaple.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: OSS qn6q**************:77Dv****************
使用SDK
以下僅列舉常見SDK通過處理參數(shù)的方式在線預(yù)覽文檔的代碼示例。如需使用其他SDK在線預(yù)覽文檔的代碼示例,請參見以下常見SDK自行調(diào)整。
Java
要求使用3.17.4及以上版本的Java SDK。
import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyuncs.exceptions.ClientException;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
public class Demo {
public static void main(String[] args) throws ClientException, ClientException {
// yourEndpoint填寫B(tài)ucket所在地域?qū)?yīng)的Endpoint。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 填寫Endpoint對應(yīng)的Region信息,例如cn-hangzhou。
String region = "cn-hangzhou";
// 從環(huán)境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// 指定Bucket名稱。
String bucketName = "examplebucket";
// 如果文檔位于Bucket根目錄,則直接填寫文檔名稱。如果文檔不在Bucket根目錄,需攜帶文檔完整路徑,例如exampledir/example.docx。
String key = "example.docx";
// 創(chuàng)建OSSClient實例。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// 構(gòu)建在線預(yù)覽文檔的處理指令。
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
getObjectRequest.setProcess("doc/preview,export_1,print_1/watermark,text_5YaF6YOo6LWE5paZ,size_30,t_60");
// 使用getObject方法,并通過process參數(shù)傳入處理指令。
OSSObject ossObject = ossClient.getObject(getObjectRequest);
// 讀取文檔信息。
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = ossObject.getObjectContent().read(buffer)) != -1) {
baos.write(buffer, 0, bytesRead);
}
String docPreview = baos.toString("UTF-8");
System.out.println("Doc Preview:");
System.out.println(docPreview);
} catch (IOException e) {
System.out.println("Error: " + e.getMessage());
} finally {
// 關(guān)閉OSSClient。
ossClient.shutdown();
}
}
}
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\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
try {
// 從環(huán)境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
$provider = new EnvironmentVariableCredentialsProvider();
// 填寫B(tài)ucket所在地域?qū)?yīng)的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
$endpoint = 'https://oss-cn-hangzhou.aliyuncs.com';
// 填寫B(tài)ucket名稱,例如examplebucket。
$bucket = 'examplebucket';
// 如果文檔位于Bucket根目錄,則直接填寫文檔名稱。如果文檔不在Bucket根目錄,需攜帶文檔完整路徑,例如exampledir/example.docx。
$key = 'example.docx';
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
// 填寫阿里云通用Region ID。
"region" => "cn-hangzhou"
);
$ossClient = new OssClient($config);
// 構(gòu)建在線預(yù)覽文檔的處理指令。
$options[$ossClient::OSS_PROCESS] = "doc/preview,export_1,print_1/watermark,text_5YaF6YOo6LWE5paZ,size_30,t_60";
$result = $ossClient->getObject($bucket,$key,$options);
var_dump($result);
} catch (OssException $e) {
printf($e->getMessage() . "\n");
return;
}
Python
要求使用Python SDK 2.18.4及以上版本。
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 從環(huán)境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# 填寫B(tài)ucket所在地域?qū)?yīng)的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# 填寫阿里云通用Region ID。
region = 'cn-hangzhou'
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region)
# 如果文檔文件位于Bucket根目錄,則直接填寫視頻名稱。如果文檔文件不在Bucket根目錄,需攜帶文檔文件完整路徑,例如exampledir/example.docx。
key = 'example.docx'
# 構(gòu)建在線預(yù)覽文檔的處理指令。
process = 'doc/preview,export_1,print_1/watermark,text_5YaF6YOo6LWE5paZ,size_30,t_60'
try:
# 使用get_object方法,并通過process參數(shù)傳入處理指令來提取視頻信息。
result = bucket.get_object(key, process=process)
# 讀取文檔信息。
doc_preview= result.read().decode('utf-8')
print("Doc Preview:")
print(doc_preview)
except oss2.exceptions.OssError as e:
print("Error:", e)
Go
要求使用Go SDK 3.0.2及以上版本。
package main
import (
"fmt"
"io"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 從環(huán)境變量中獲取臨時訪問憑證。運行本代碼示例之前,請確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 創(chuàng)建OSSClient實例。
// yourEndpoint填寫B(tài)ucket對應(yīng)的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其他Region請按實際情況填寫。
// yourRegion指定阿里云通用Region ID,例如cn-hangzhou。
client, err := oss.New("https://oss-cn-hangzhou.aliyuncs.com", "", "", oss.SetCredentialsProvider(&provider), oss.AuthVersion(oss.AuthV4), oss.Region("cn-hangzhou"))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 指定Bucket名稱,例如examplebucket。
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 如果文檔位于Bucket根目錄,則直接填寫文檔名稱。如果文檔不在Bucket根目錄,需攜帶文檔完整路徑,例如exampledir/example.docx。
// 通過oss.Process方法構(gòu)建在線預(yù)覽文檔的處理指令。
body, err := bucket.GetObject("example.docx", oss.Process("doc/preview,export_1,print_1/watermark,text_5YaF6YOo6LWE5paZ,size_30,t_60"))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
defer body.Close()
data, err := io.ReadAll(body)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println("data:", string(data))
}
常見問題
是否支持預(yù)覽動態(tài)PPT中的動畫和視頻?
支持。在線預(yù)覽功能最大支持200 MB的文檔,超過200 MB則無法訪問。
是否支持預(yù)覽圖片文件?
不支持。
開啟CDN后生成帶簽名的文檔URL報錯Either the Signature query string parameter or the Authorization header should be specified, not both.
如果您在私有 Bucket 開啟回源功能后,通過 CDN 域名訪問已綁定至 IMM 項目的 Bucket 中的文件,無需提供額外的簽名信息。請按照以下要求進行配置:
授權(quán)默認角色 您需要為CDN的默認角色
AliyunCDNAccessingPrivateOSSRole
授予oss:ProcessImm
和imm:GetWebofficeURL
權(quán)限。訪問資源時,應(yīng)使用不包含簽名信息的 URL。
例如,您可以使用如下格式的URL:http://cdn.example.info/demo.ppt?x-oss-process=doc/preview,export_1,print_1使用文檔在線預(yù)覽功能。