

实际业务中由于需要用到wps附件上传下载,但官方并没有这方面的指令

经过查询wps社区发现有限制,不能以常规的方法用API接口直接下载附件

经过深入研究wps后,发现使用wps中的airscript脚本可以获取到附件中的下载地址url。对此,基于airscript脚本衍生两种下载方法。

可以看到在这里,我们使用airscript获取图片和附件字段是有专门的脚本的,并且还能够返回LinkUrl。此时,我们点进去Attachment获取详细信息https://365.kdocs.cn/3rd/open/documents/app-integration-dev/guide/dbsheet/Api/Attachment。向下滑,可以看到脚本示例,不过它是获取附件名称的属性。

要想获取附件下载链接则只需要改一下属性即可。下面两种方式,效果是相同的,为了适应不同需求场景

效果如下

需要注意的是:如果直接在浏览器中用链接下载的文件是这种类型的,因为没有后缀名

后面我们使用影刀自带的指令http下载加上xlsx后缀名即可
此时,我们将这个下载链接写进新建的字段中,参考如下:https://365.kdocs.cn/l/ctzsgDlAGF0l


效果如下

完整AirScript脚本
function main() {
const dbCellValue = Application.Sheets(1).Views(1).RecordRange("G","@图片和附件").Value
const attments = dbCellValue.Value
console.log(attments[0].FileName)
console.log(attments[0].LinkUrl)
Application.Record.UpdateRecords({//更新记录
SheetId: 1,//数据表id
Records: [{
id: "G",//记录id
fields: {
下载链接: attments[0].LinkUrl
}
}]
})
}
main()之后我们只需要设置好自动化流程,每次新增或修改附件字段内容就将下载地址写进对应记录中的字段


而在airscript脚本中接收参数即可

效果如下:
每次我们增加一个附件就会自动将其临时下载地址写进去

写进来以后就好办了,影刀中只需要调用之前已经封装好的列举记录指令(这个指令是自己封装的,上一篇文章中有写过),获取这个下载链接内容即可。获取到内容后,用http下载指令下载文件就好了


参考文档:AirScript 概述 | AirScript文档


基本配置


脚本代码
这里的sheetId如果不能直接用数字,则替换为数据表名称即可,不过要和recordId一样,${sheetId}包裹
var sheetId = Context.argv.sheet_id;//脚本入参,定义一个变量接收这个参数值
var recordId = Context.argv.record_id;//脚本入参,定义一个变量接收这个参数值
function main() {
const results=[]
const dbCellValue = Application.Sheets(sheetId).Views(1).RecordRange(`${recordId}`,"@图片和附件").Value
const attments = dbCellValue.Value
results.push({'file_name':attments[0].FileName, 'down_url':attments[0].LinkUrl})
return results
}
return main()//把函数的返回值作为脚本的返回值影刀指令则如下设置:

效果如下:

两种方法都可以用,看个人选择。目前已应用于实际场景一个多月,暂无问题。
本次分享的是下载附件,有时间再分享上传附件的方法。有疑问,评论区聊