Я загружаю из хранилища Google на моем сервисе nodejs, у меня есть служебный модуль, который выглядит следующим образом:
'use strict';
const BPromise = require('bluebird');
const logger = require('../../setup/logger');
module.exports = () => {
let GCloudStorage = {};
GCloudStorage.getStorage = () => {
return require('@google-cloud/storage')();
};
/**
* @param bucketName
* @param filePath
* @param destination the local disk destination
*/
GCloudStorage.downloadFile = (bucketName, filePath, destination) => {
return new BPromise((resolve, reject) => {
const storage = GCloudStorage.getStorage();
logger.info('Downloading file %s in bucket %s to local path: %s', filePath, bucketName, destination);
const file = storage.bucket(bucketName).file(filePath);
const config = {
destination: destination,
validation: false
};
file.download(config)
.then(() => {
logger.debug('Downloaded gs://%s/%s to %s', bucketName, filePath, destination);
resolve(destination);
})
.catch((err) => {
reject(err);
});
});
};
return GCloudStorage;
};
А затем в своем бизнес-коде я использую его так:
let promises = [];
images.map(image => {
promises.push(storageUtil.downloadFile(config.userFolder, image.image, path.resolve(`./reports/${reportId}/${image.name.replace(/[^a-zA-Z0-9-_\.]/g, '')}`)));
});
return BPromise.all(promises);
Когда этот процесс запускается, служба увеличивает использование памяти и не собирает ее в течение срока службы.
Я знаю, что это может быть проблема nodejs с моим кодом, но естьчто я мог сделать?