尝试将图片上传到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
});
答案 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
作为计时器。这对我们很有用,因为这是不需要快速执行的动作。它只是必须工作。