Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.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 为什么我的文件来自图像;“请求”;保存到谷歌云存储时不完整?_Javascript_Node.js_Google Cloud Storage - Fatal编程技术网

Javascript 为什么我的文件来自图像;“请求”;保存到谷歌云存储时不完整?

Javascript 为什么我的文件来自图像;“请求”;保存到谷歌云存储时不完整?,javascript,node.js,google-cloud-storage,Javascript,Node.js,Google Cloud Storage,我正试图将一张图片从URL上传到我的谷歌云存储(Firebase)。以下函数将返回文件,连续函数将检索新文件的实际签名/下载Url。在所有这些之后,我正在用新的URL更新Firestore数据库中的一个文档。这一部分起作用;函数等待上载(不幸的是不完整的)图像,我的文档将使用新创建的文件url进行更新。但实际的文件/图像不完整:-( 保存/上载/流式传输到我的云存储文件的图像如下所示: 我尝试过使用node fetch和request并以多种方式重写我的函数,但结果总是这样。我确信这与我如何使

我正试图将一张图片从URL上传到我的谷歌云存储(Firebase)。以下函数将返回文件,连续函数将检索新文件的实际签名/下载Url。在所有这些之后,我正在用新的URL更新Firestore数据库中的一个文档。这一部分起作用;函数等待上载(不幸的是不完整的)图像,我的文档将使用新创建的文件url进行更新。但实际的文件/图像不完整:-(

保存/上载/流式传输到我的云存储文件的图像如下所示:

我尝试过使用node fetch和request并以多种方式重写我的函数,但结果总是这样。我确信这与我如何使用承诺有关,因为如果我忽略承诺,文件实际上会完成,但主代码会继续执行,而不是等待这个承诺

结果相同(文件不完整):

直接返回流将写入一个完整的文件,但我的主代码没有等待该文件(我需要处理该文件)


谢谢你在这方面的帮助!

所以这是最终对我有用的代码

 return new Promise((resolve, reject) => {

     const req = request(fileUrl);
     req.pause();
     req.on('response', res => {

        const writeStream = file.createWriteStream({
          metadata: {
            contentType: res.headers['content-type']
          }
        });

        req.pipe(writeStream)
          .on('finish', () => {
            console.log('Photo saved');
            resolve(file);
          })
          .on('error', err => {
            writeStream.end();
            console.error(err);
            reject();
          });

        req.resume();  

     });
     req.on('error', err => console.error(err));   
  });
return await fetch(fileUrl).then(res => { 

    const contentType = res.headers.get('content-type');
    const writeStream = file.createWriteStream({
        metadata: {
        contentType
        }
    });

    let p = new Promise((resolve, reject) => {
        res.body.pipe(writeStream);
        writeStream.on('finish', function() {
            console.log("Stream finished")
            resolve(file);
        });
        writeStream.on('error', function() {
            reject(new Error("Whoops!"));
        });
    });

    return p.then(
        function(file) {
            console.log('Photo saved');
            return file},
        function(error) {
            console.error(error);
            return;
        });
    });
    return res.body.pipe(writeStream)
      .on('finish', () => {        
        return file;
        console.log('Photo')
      })
      .on('error', err => {
        return console.error(err);
      });
 return new Promise((resolve, reject) => {

     const req = request(fileUrl);
     req.pause();
     req.on('response', res => {

        const writeStream = file.createWriteStream({
          metadata: {
            contentType: res.headers['content-type']
          }
        });

        req.pipe(writeStream)
          .on('finish', () => {
            console.log('Photo saved');
            resolve(file);
          })
          .on('error', err => {
            writeStream.end();
            console.error(err);
            reject();
          });

        req.resume();  

     });
     req.on('error', err => console.error(err));   
  });