如何在Zapier JavaScript中获取原始文件字节?
我用Google Drive文件创建Zap时,通过bundle.inputData.new_data获取到的不是原始文件字节,而是一段类似这样的内容:
hydrate|||.eJx1jk9zgjAUxL_LOzMd_mmLMz0EoUwt1NGxY-XCxBA1gYQKAYuO373B2mP3uLu_fe8CpJKKSpWp_ovCBBAYwGSjsCQ0YzlMHM_1bHP8aABpG1WJtqH1LbAsZzQau54BmJCq1RN_rqNlwI7RMs8kFsNsTrtsx0qq14sTrvcNTC5wP3n3BVWHSi_Aoc9rrKq6edBvNIdQYFa-tJIoVknd27Yy14Dm6ZC8DghCSYGCD3u-XjgpD614PePJGan3YG-nU3OUiIUdr8I-4RsnORM75UU_R36EbvL3vdik8yXGi-P358YVvFBB75-CuIumZvm07ZZY2hTPrI76_JcJE4T-y8PoaL4tdekZrtfrD1kpc6s:1q14Ki:h48rK3jHmPQcT7ca4T0RPbELNVM|||hydrate
我的代码如下:
const publishData = (z, bundle) => { ... const data = bundle.inputData.new_data; ... function publish(record, publisher, host) {...} } module.exports = { ... operation: { inputFields: [ {key: "methods", label: "Method", choices: {hosted: 'Hosted', ipfs: 'IPFS'}, required: true}, {key: "new_data", label: "Data", required: false} ], perform: publishData, sample: sample }, };
我需要获取原始文件字节来执行哈希函数,试过解码和直接使用都无效,请问该怎么处理?
解决方案
这段带hydrate|||前缀后缀的内容是Zapier的**脱水(dehydrated)**数据,你需要用Zapier内置的z.dehydrate.utility.getRawBody方法还原出原始文件字节。
修改你的代码,在publishData函数中这样处理:
const publishData = async (z, bundle) => { // 还原脱水的文件数据为原始字节Buffer const rawFileBuffer = await z.dehydrate.utility.getRawBody(bundle.inputData.new_data); // 直接用Buffer执行哈希计算(示例为SHA256) const crypto = require('crypto'); const fileHash = crypto.createHash('sha256').update(rawFileBuffer).digest('hex'); ... function publish(record, publisher, host) {...} }
关键注意事项
- 必须将
publishData声明为异步函数(使用async/await),因为getRawBody是异步操作 getRawBody返回的是Node.js的Buffer对象,可直接传入哈希函数的update方法- 无需手动解码那段hydrate字符串,Zapier的工具方法会自动完成所有还原逻辑
内容的提问来源于stack exchange,提问作者Neifi

