本文将演示如何使用IMM快速搭建文档预览服务。
演示用到的所有资源region都创建到:华东1
准备工作
- 登录阿里云控制台
- 开通OSS、IMM服务
- 进入OSS控制台, 创建Bucket,存放待转换文档
- 进入IMM控制台,创建IMM文档转换Project
将待转换文档上传到Bucket
上传文件可以使用OSS Bowser工具,也可以使用OSS控制台上传。
演示环境的待转换文档路径为:
oss://preview-office-bucket/docs/input/demo.pptx
演示环境的文档转换后存放路径为:
oss://preview-office-bucket/docs/output/demo_pptx
提交文档转换任务
- 创建用户,并记录下AK信息,用于提交IMM文档转换任务和OSS临时权限签发。OSS临时权限签发是授权预览引擎获取OSS文档的权限,在下一步生成预览文档url会用到。
- 给用户添加STS和IMM的权限
- 新建nodeJs项目,安装IMM SDK。
npm install @alicloud/pop-core --save
- 提交文档转换任务:
const { RPCClient } = require('@alicloud/pop-core');
// 填写刚才创建用户时记录下的AK信息
const accessKeyId = 'LT******xR';
const accessKeySecret = 'rB******QN';
var client = new RPCClient({
endpoint:'http://imm.cn-hangzhou.aliyuncs.com',
accessKeyId: accessKeyId,
accessKeySecret: accessKeySecret,
apiVersion: '2017-09-06'
});
try{
var params = {
Project: "imm-server",
SrcUri: "oss://preview-office-bucket/docs/input/demo.pptx",
TgtType: "vector",
TgtUri: "oss://preview-office-bucket/docs/output/demo_pptx"
};
var result = await client.request("createOfficeConversionTask", params);
console.log(result);
}catch(err){
console.log(err);
}
执行代码后,查看output目录是否生成目标文件:
生成预览文档url
文档转换完成后,需要在线预览,还需要完成以下步骤:
- 新建一个bucket,选择公共读,用于存放前端预览引擎:
- 点击下载前端预览引擎,解压后,上传到preview-index。
- 给存放文档的bucket设置跨域访问,因为前端预览引擎页面会跨域获取存放到preview-office-bucket的文档内容
- 创建角色,添加OSS的权限,用于签发OSS临时权限。
const { RPCClient } = require('@alicloud/pop-core');
const accountId = '1042201747765506';
const roleArn = 'acs:ram::1042201747765506:role/ststest';
const accessKeyId = 'LT******xR';
const accessKeySecret = 'rB******QN';
const region = "oss-cn-hangzhou";
// 存放文档的bucket
const bucket = "preview-office-bucket";
// 预览引擎的访问地址
const previewUrl = 'http://preview-index.oss-cn-hangzhou.aliyuncs.com/index.html';
var client = new RPCClient({
endpoint:'https://sts.aliyuncs.com',
accessKeyId: accessKeyId,
accessKeySecret: accessKeySecret,
apiVersion: '2015-04-01'
});
try{
var params = {
// AssumeRole action
Action: 'AssumeRole',
// 有权限访问OSS的角色
RoleArn: roleArn,
// 此参数用来区分不同的Token,以标明谁在使用此Token,便于审计。格式:^[a-zA-Z0-9.@-_]+$,2-32个字符
RoleSessionName: accountId,
// 权限最小化,限制用户只能访问该文档
Policy: JSON.stringify({
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"oss:GetObject"
],
"Resource": [
`acs:oss:*:${accountId}:${bucket}/docs/output/demo_pptx/*`
]
}
]
}),
// 有效期
DurationSeconds: 3600
};
var result = await client.request('AssumeRole', params);
function parse(params){
return Object.keys(params).map((key) => {
return `${key}=${params[key]}`;
}).join("&");
}
var params = {};
// 预览文档地址
params.url = `http://${bucket}.${region}.aliyuncs.com/docs/output/demo_pptx`;
// 访问预览文档的accessKeyId
params.accessKeyId = result.Credentials.AccessKeyId;
// 访问预览文档的accessKeySecret
params.accessKeySecret = result.Credentials.AccessKeySecret;
// 访问预览文档的SecurityToken
params.stsToken = encodeURIComponent(result.Credentials.SecurityToken);
// 预览文档的region
params.region = region;
// 预览文档的bucket
params.bucket = bucket;
var url = `${previewUrl}?${parse(params)}`
console.log(url);
}catch(err){
console.log(err);
}
执行成功后打印的url复制到浏览器中,即可看到预览效果: