使用nodeJs快速搭建IMM文档预览服务-阿里云开发者社区

开发者社区> 开发与运维> 正文

使用nodeJs快速搭建IMM文档预览服务

简介: 使用nodeJs搭建IMM文档预览服务

本文将演示如何使用IMM快速搭建文档预览服务。

演示用到的所有资源region都创建到:华东1

准备工作

  • 登录阿里云控制台
  • 开通OSS、IMM服务
  • 进入OSS控制台, 创建Bucket,存放待转换文档

image

image

将待转换文档上传到Bucket

上传文件可以使用OSS Bowser工具,也可以使用OSS控制台上传。

演示环境的待转换文档路径为:

oss://preview-office-bucket/docs/input/demo.pptx

演示环境的文档转换后存放路径为:

oss://preview-office-bucket/docs/output/demo_pptx

image

提交文档转换任务

  • 创建用户,并记录下AK信息,用于提交IMM文档转换任务和OSS临时权限签发。OSS临时权限签发是授权预览引擎获取OSS文档的权限,在下一步生成预览文档url会用到。

image

  • 给用户添加STS和IMM的权限

image

  • 新建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目录是否生成目标文件:

image

生成预览文档url

文档转换完成后,需要在线预览,还需要完成以下步骤:

  • 新建一个bucket,选择公共读,用于存放前端预览引擎:

image

  • 点击下载前端预览引擎,解压后,上传到preview-index。

image

  • 给存放文档的bucket设置跨域访问,因为前端预览引擎页面会跨域获取存放到preview-office-bucket的文档内容

image

  • 创建角色,添加OSS的权限,用于签发OSS临时权限。

image

image

  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复制到浏览器中,即可看到预览效果:

image

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章