Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript firebase功能通过流从web上载文件仅部分工作_Javascript_Node.js_Firebase_Axios_Google Cloud Functions - Fatal编程技术网

Javascript firebase功能通过流从web上载文件仅部分工作

Javascript firebase功能通过流从web上载文件仅部分工作,javascript,node.js,firebase,axios,google-cloud-functions,Javascript,Node.js,Firebase,Axios,Google Cloud Functions,我正在尝试创建一个firebase函数,通过URL从web下载照片并将其上载到firebase存储 使用Axios将文件流式传输到存储桶。文件似乎已上载,但我无法下载或查看它 这是我的代码: let fileURL = 'https://www.example.file.path.png' let myFile = await axios.get(fileURL, { responseType: 'stream' }) let destFile = bucket.file(photoId).c

我正在尝试创建一个firebase函数,通过URL从web下载照片并将其上载到firebase存储

使用Axios将文件流式传输到存储桶。文件似乎已上载,但我无法下载或查看它

这是我的代码:

let fileURL = 'https://www.example.file.path.png'

let myFile = await axios.get(fileURL, { responseType: 'stream' })
let destFile = bucket.file(photoId).createWriteStream({ contentType: myFile.headers['content-type']})
myFile.data.pipe(destFile)
这是firebase的存储控制台:

我弄乱了存储api,并尝试使用上载和保存功能。使用axios get and write streams是我最接近实现这一目标的方法

读取文档中的文件只会有助于我的混淆,因为文件在上传功能中从未被引用。。只是文件名


感觉我差不多就在那里了,考虑到了文件,或者更确切地说,文件的名称,大小和类型。。只是内容不一样?

此问题仅与Firebase控制台相关。使用以下命令下载时没有问题:
gsutil cp gs:///yourfile.
(),并且它在存储浏览器()的Google云控制台中工作

然而,像这样上传的文件确实不可能用Firebase控制台下载或预览

经过多次尝试后,我意识到这与自定义元数据
访问令牌
有关,其下面称为
firebaseStorageDownloadTokens
。如果您直接在Firebase控制台中下载文件,则会自动显示

无论如何,我注意到元数据的值是不相关的。根据我的测试,如果将
createWriteStream
方法参数更改为:

let destFile = bucket.file(photoId)
                .createWriteStream({ 
                        metadata: { 
                                contentType: myFile.headers['content-type'],
                                metadata: {
                                        firebaseStorageDownloadTokens: 'canBeAnyThing'
                                }
                        } 
                });
问题消失了

已下载到Firebase存储且受此问题影响的文件可以通过添加相同的元数据进行修复。在您提供的屏幕截图中,您可以看到“文件位置”,如果您打开,您将看到“创建新访问令牌”链接,或者您也可以在GCP存储浏览器中添加它,在此类对象的“编辑元数据”中手动添加它(请记住在浏览器中刷新FB控制台)


在这一点上,我们可以想想为什么它看起来像这样。我在github中找到了一些有趣的信息。

您没有正确使用节点流api。pipe()不返回承诺。可能需要查看文档:当您尝试下载它时发生了什么?