【问题标题】:Error: socket hang up code: 'ECONNRESET' on Google cloud storage错误:套接字挂断代码:Google 云存储上的“ECONNRESET”
【发布时间】:2015-09-19 22:54:17
【问题描述】:

我们在尝试将图像上传到谷歌云存储时不断收到 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
});

【问题讨论】:

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


【解决方案1】:

不确定这是否仍然相关,但我遇到了同样的问题。但是对我来说最终导致错误的是这两件事:

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 张新图片。

对我们有用的就是添加一个setTimeout()40 * index 之类的东西作为计时器。这对我们有用,因为这是一个不需要快速或其他什么的动作。它只需要工作。

【讨论】:

    【解决方案2】:

    不知道为什么没有人回答这个问题。 我有同样的错误,通过将 resumablevalidation 设置为 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 hangup 错误。

    【讨论】:

      猜你喜欢
      • 2015-11-07
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      • 2013-09-12
      • 2018-10-02
      • 2015-06-26
      • 1970-01-01
      • 2014-07-27
      相关资源
      最近更新 更多