企业云盘API集成实战:如何把云盘功能嵌进现有系统

上个月帮一个哥们公司解决了个实际问题。他做咨询的,内部有一套自己开发的CRM系统,但合同文档管理一直是独立的另一个地方。每次查客户资料要打开两个系统,业务员抱怨很久了。

他问我能不能把云盘直接嵌进CRM里。我研究了一圈,发现主流企业云盘基本都支持开放API,实现起来没想象的复杂。

需求分析:到底要集成什么

在动手之前先搞清楚要集成哪些功能。不是所有功能都需要API,有些直接在iframe里嵌入就行了。

他们主要需要三个能力——
1. 从CRM直接上传合同文档到云盘的客户目录
2. 在CRM里直接预览云盘里的文档(不用跳转)
3. 给客户发一个云盘链接,不用再手动上传

这三个需求的实现难度完全不同。上传和链接生成用API就行,预览比较麻烦,涉及各种文档格式的在线预览。

上传功能:一次表单提交搞定

云盘的API上传逻辑都差不多:先获取一个上传地址(预签名URL),然后直接PUT文件上去,最后再调一个确认接口告诉云盘”我传完了”。

async function uploadContract(file, customerId) {
  // 第一步:获取上传地址
  const { uploadUrl, fileId } = await cloudDiskAPI.getUploadUrl({
    filename: file.name,
    size: file.size,
    path: `/contracts/${customerId}/`
  });

  // 第二步:直接上传到云存储(绕过后端,性能更好)
  await fetch(uploadUrl, {
    method: 'PUT',
    body: file,
    headers: { 'Content-Type': file.type }
  });

  // 第三步:确认上传完成
  await cloudDiskAPI.confirmUpload(fileId);

  return fileId;
}

有个坑:上传地址有时效,一般5分钟就过期。如果文件比较大或者网络上比较慢,传完可能地址已经失效了。解决方案是分片上传,每片独立签名,单片失败只重传那一片。

文档预览:比想象中复杂

预览是最麻烦的部分。PDF还好说,很多云盘自带PDF预览器。但Word、Excel这些格式就麻烦了。

最省事的方案是让云盘生成一个预览链接,直接在iframe里打开。大多数云盘开放平台都提供这个功能,生成一个带token的预览URL,有效期可以设置,过期了重新申请就行。

但这里有个权限问题:预览链接相当于临时访问权限,如果token泄露别人也能看。所以一般要设置较短的过期时间,并且绑定来源域名(Referer检查)。

如果云盘没有在线预览能力,就要自己转格式。比如把Word转成PDF再预览,这个要后端做,涉及LibreOffice或者类似工具的集成。

外链分享:调一个接口就完事

这个最简单。调用云盘的分享API,传入文件ID和过期时间,返回一个分享链接。

async function createShareLink(fileId, expiresInDays = 7) {
  const share = await cloudDiskAPI.createShare({
    fileId,
    password: '', // 可以设密码
    expiresAt: Date.now() + expiresInDays * 24 * 60 * 60 * 1000,
    permissions: ['preview', 'download']
  });

  return share.url;
}

但这里有个容易被忽视的问题:外链的权限范围。如果业务员给客户发的是”可下载”的链接,客户就能把合同下载到本地,后续如果发现合同有问题想撤回就麻烦了。更好的做法是给”仅预览”的链接,禁止下载,真需要下载要走审批流程。

认证和权限:最重要的一环

集成API第一件事是把认证搞清楚。企业云盘一般支持OAuth2或者API Key两种方式。

API Key最简单,但安全性差一些,适合内部系统集成。OAuth2适合需要给第三方应用授权的场景,实现稍微复杂但更安全。

还有个要注意的是权限穿透:CRM里的用户和云盘里的用户是两套体系。怎么对应?如果公司规模不大,可以手动建一个映射表。员工在CRM的账号ID对应他在云盘的账号ID,这样上传的文件自动归属正确的人。

如果公司大了,这种手动映射就不可行了,需要走SSO(单点登录),CRM和云盘都用同一套账号体系。

集成效果

最后帮他们落地的时候,实际上线的主要就是上传合同、生成外链这两个功能。预览他们最后没用,因为业务反馈跳转一下也能接受,没必要为了省这一步引入额外复杂度。

整个集成大概花了一周多,主要时间在调试签名和权限逻辑上,API本身文档写得挺清楚的。如果一开始就选型的时候就确认好云盘的API能力够不够,能省不少功夫。

发表评论

电子邮件地址不会被公开。 必填项已用*标注