我试图发送一个POST表单,包括(原始)文件,这些文件位于谷歌云存储桶
这段代码在firebase云函数中运行--我不想将存储文件下载到云函数示例,然后通过表单上传(这可以工作),而是直接将表单传递给Stream
async function test() {
const rp = require('request-promise');
const path = require('path');
const { Storage } = require('@google-cloud/storage');
const storage = new Storage();
const bucketName = 'xxx';
const bucket = storage.bucket(bucketName);
const fileAPath = path.join('aaa', 'bbb.jpg');
let formData = {
fileA: bucket.file(fileAPath).createReadStream(),
};
return rp({
uri: uri,
method: 'POST',
formData: formData,
});
}
如果我们先下载文件(到云函数示例上的临时文件),然后使用fs.createReadStream(fileAPath_tmp)
,POST将按预期工作
POST失败(i)即端点不以相同的方式接收文件,如果有的话),当使用上面的代码(没有临时下载)使用bucket.file(fileAPath).createReadStream()
2条答案
按热度按时间xesrikrc1#
根据Google File Storage
createReadStream
的文档,您需要使用读取流,就好像它是一个事件发射器来填充缓冲区以返回给最终用户。您应该能够使用.pipe()
方法将其直接传递到HTTP响应,这与现有的源代码类似。e4eetjau2#
我设法使用
form-data
npm包让它工作。我的例子使用了axios
,但我猜它与request-promise
类似: