错误:套接字挂断代码:Google云端存储上的“ECONNRESET”

时间:2015-07-02 11:59:57

标签: node.js google-cloud-storage google-cloud-platform

尝试将图片上传到Google云端存储时,我们一直收到ECONNRESET错误。

var storage = require('gcloud').storage({
    projectId: projectNumber,
    credentials: credentials
});

//...

var file = Storage.bucket('myBucket').file('test.png');
fs.createReadStream('/path/to/image.png').pipe(file.createWriteStream({
    metadata: {
        contentType: 'image/png',
        cacheControl: 'public, max-age=2592000'
    }
}).on('complete', function () {
  //
}).on('error', function (err) {
  // err = Error: socket hang up || Request Timeout after 30000ms
});

2 个答案:

答案 0 :(得分:0)

不确定为什么没有人回答这个问题。 我有同样的错误,并通过将可恢复验证设置为 false 来解决此问题:

var gcsStream = Storage.bucket('myBucket').file('test.png').createWriteStream({
      resumable: false,
      validation: false,
      metadata: {
        contentType: 'image/png'
      }
    });
fs.createReadStream('/path/to/image.png').pipe(gcsStream);

如果没有2个设置,每次上传20~30张图像时都会出现Socket挂起错误。

答案 1 :(得分:0)

不确定这是否仍然有用,但我遇到了同样的问题。但是对我而言,最终导致错误的是这两件事:

const [exists] = await file.exists();

const writeStream = file.createWriteStream();
fetch(url)
    .then(res => {
        res.body.pipe(writeStream);
        res.body.on('error', err => {
            reject(err);
        });
        writeStream.on('finish', async () => {
            resolve();
        });
    })
    .catch(console.error);

重要的是要注意,在我看来,这些事情没有错,但问题在于我们在短时间内处理大量请求。我们一次将200到600张新图像推送到Google。

对我们有用的是,只需添加一个setTimeout()之类的40 * index作为计时器。这对我们很有用,因为这是不需要快速执行的动作。它只是必须工作。