Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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
Node.js 使用nodejs通过http下载并流式上传到谷歌云存储_Node.js_Google Cloud Platform_Google Cloud Storage - Fatal编程技术网

Node.js 使用nodejs通过http下载并流式上传到谷歌云存储

Node.js 使用nodejs通过http下载并流式上传到谷歌云存储,node.js,google-cloud-platform,google-cloud-storage,Node.js,Google Cloud Platform,Google Cloud Storage,我正在努力获得一个下载,直接流到地面军事系统,而不保存到文件系统,见下面的片段 const { Storage } = require('@google-cloud/storage'); const http = require('http'); const storage = new Storage(); const fs = require("fs"); const bucketName = 'BUCKETNAMEHERE'; const blobName = 'image.jpg'; co

我正在努力获得一个下载,直接流到地面军事系统,而不保存到文件系统,见下面的片段

const { Storage } = require('@google-cloud/storage');
const http = require('http');
const storage = new Storage();
const fs = require("fs");
const bucketName = 'BUCKETNAMEHERE';
const blobName = 'image.jpg';
const bucket = storage.bucket(bucketName);
const blob = bucket.file(blobName);

const streamDownload = () => {
    http.get("http://i3.ytimg.com/vi/J---aiyznGQ/mqdefault.jpg")
        .pipe(blob.createWriteStream({
            metadata: {
                contentType: 'image/jpg'
            }
        }))
        .on("error", (err) => {
            console.error(`error occurred`);
        })
        .on('finish', () => {
            console.info(`success`);
        });
};
完成时从不触发。没有任何输出。 我可以将http.get流式传输到本地文件而不会出现问题,所以这部分似乎还可以

从本地文件系统到GCS的流式传输同样有效,如下所示:

const streamFs = () => {
    fs.createReadStream('/path/to/mqdefault.jpg')
        .pipe(blob.createWriteStream({
            metadata: {
                contentType: 'image/jpg'
            }
        }))
        .on("error", (err) => {
            console.error(`error occurred`);
        })
        .on('finish', () => {
            console.info(`success`);
        });
};
第二个代码段记录“success”,该文件存在于bucket中

http.get
fs.createReadStream
都创建读取流


我在这里做错了什么?

切换到
请求
库确实有效:

const request = require('request');
const streamDownload = () => {
    request.get("http://i3.ytimg.com/vi/J---aiyznGQ/mqdefault.jpg")
        .pipe(blob.createWriteStream({
            metadata: {
                contentType: 'image/jpg'
            }
        }))
        .on("error", (err) => {
            console.error(`error occurred`);
        })
        .on('finish', () => {
            console.info(`success`);
        });
};

仍然不确定为什么
http
库没有。请求库使用承诺,而http库需要回调:

const streamDownload = () => {

  var stream = blob.createWriteStream({
    metadata: {
        contentType: 'image/jpg'
    }
  })

  http.get("http://i3.ytimg.com/vi/J---aiyznGQ/mqdefault.jpg", function(res){
        stream.on("error", (err) => {
            console.error(`error occurred`);
        })
        stream.on('finish', () => {
            console.info(`success`);
        });
        res.pipe(stream)            
    })
}