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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 使用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

目录
相关文章
|
2月前
|
Web App开发 JavaScript 前端开发
构建高效后端服务:Node.js与Express框架的实战指南
【9月更文挑战第6天】在数字化时代的潮流中,后端开发作为支撑现代Web和移动应用的核心,其重要性不言而喻。本文将深入浅出地介绍如何使用Node.js及其流行的框架Express来搭建一个高效、可扩展的后端服务。通过具体的代码示例和实践技巧,我们将探索如何利用这两个强大的工具提升开发效率和应用性能。无论你是后端开发的新手还是希望提高现有项目质量的老手,这篇文章都将为你提供有价值的见解和指导。
|
3月前
|
存储 负载均衡 监控
检索服务elasticsearch节点(Node)
【8月更文挑战第23天】
58 5
|
3月前
|
JavaScript 前端开发 中间件
构建高效后端服务:Node.js与Express框架的完美搭档
【8月更文挑战第28天】在追求高性能、可扩展和易维护的后端开发领域,Node.js和Express框架的组合提供了一种轻量级且灵活的解决方案。本文将深入探讨如何利用这一组合打造高效的后端服务,并通过实际代码示例展示其实现过程。
|
6月前
|
Kubernetes 应用服务中间件 Docker
Kubernetes学习-集群搭建篇(二) 部署Node服务,启动JNI网络插件
Kubernetes学习-集群搭建篇(二) 部署Node服务,启动JNI网络插件
|
2月前
|
SQL JavaScript 关系型数据库
Node服务连接Mysql数据库
本文介绍了如何在Node服务中连接MySQL数据库,并实现心跳包连接机制。
43 0
Node服务连接Mysql数据库
|
3月前
|
监控 JavaScript 前端开发
深入浅出Node.js: 打造高效的后端服务
【8月更文挑战第27天】在这个数字化飞速发展的时代,后端技术成为支撑互联网服务的基石。Node.js作为其中的佼佼者,以其非阻塞I/O模型、事件驱动架构和丰富的生态系统,赢得了开发者的青睐。本文将带领读者深入理解Node.js的核心概念,通过实际案例分析其应用模式,并探讨如何利用Node.js构建高效、可扩展的后端服务。无论你是初学者还是有经验的开发者,都能在这篇文章中找到提升你的Node.js技能的灵感和知识。
|
3月前
|
Web App开发 JavaScript 中间件
构建高效后端服务:Node.js与Express框架的深度整合
【8月更文挑战第27天】 在现代Web开发中,后端服务的高效性至关重要。本文深入探讨了如何利用Node.js的非阻塞I/O特性和Express框架的简洁性来打造高性能的后端服务。我们将通过具体案例,展示如何在不牺牲代码可读性和可维护性的前提下,实现高效的请求处理和服务端逻辑。文章旨在为开发者提供一个清晰的指导,帮助他们在构建后端服务时做出更明智的技术选择。
|
3月前
|
存储 缓存 JavaScript
构建高效后端服务:Node.js与Express框架的实战应用
【8月更文挑战第2天】在数字化时代的浪潮中,后端服务的构建成为了软件开发的核心。本文将深入探讨如何利用Node.js和Express框架搭建一个高效、可扩展的后端服务。我们将通过实际代码示例,展示从零开始创建一个RESTful API的全过程,包括路由设置、中间件使用以及数据库连接等关键步骤。此外,文章还将触及性能优化和安全性考量,旨在为读者提供一套完整的后端开发解决方案。让我们一同走进Node.js和Express的世界,探索它们如何助力现代Web应用的开发。
|
3月前
|
弹性计算 JavaScript 中间件
构建高效后端服务:使用Node.js和Express框架
【8月更文挑战第4天】本文将通过一个实际案例,详细介绍如何使用Node.js和Express框架快速构建一个高效、可扩展的后端服务。我们将从项目初始化开始,逐步实现RESTful API接口,并介绍如何利用中间件优化请求处理流程。最后,我们将展示如何部署应用到云服务器上,确保其高可用性和可扩展性。
|
3月前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js: 打造高效后端服务
【8月更文挑战第27天】Node.js作为一款强大的后端开发平台,以其非阻塞I/O和事件驱动的特性深受开发者喜爱。本篇文章将引导你从基础到进阶,探索Node.js的核心技术与应用实践,让你能够利用这一技术构建高效、可扩展的后端服务。文章不仅包含理论知识,还会通过实际代码示例加深理解,让学习过程既系统又富有趣味。