Решение: загрузка нескольких файлов с использованием multer, pkgcloud и openstack
У меня было требование загрузить несколько файлов в хранилище объектов в Bluemix. Я использовал Малтера для получения файлов. Я столкнулся с несколькими проблемами с Multer или pkgcloud, начиная от проблем с авторизацией и заканчивая проблемами ENOENT. Я боролся в течение 3 дней и, наконец, получил рабочий код. Размещать пример, если это кому-нибудь поможет.
var config = {
provider: 'openstack',
useServiceCatalog: true,
useInternal: false,
keystoneAuthVersion: 'v3',
authUrl: vcapCredential.objectStorage_credential.auth_url,
tenantId: vcapCredential.objectStorage_credential.projectId,
domainId: vcapCredential.objectStorage_credential.domainId,
username: vcapCredential.objectStorage_credential.userId,
password: vcapCredential.objectStorage_credential.password,
region: vcapCredential.objectStorage_credential.region
};
var multer = require('multer');
var upload = multer({ dest: './uploads' });
app.post('/upload', upload.any(), function(req, res){
var filelist = req.files;
var storageClient = pkgcloud.storage.createClient(config);
storageClient.auth(function(err) {
if (err) {
console.error('err :' + err.message);
}
else {
console.log('success' + storageClient._identity);
}
});
storageClient.createContainer({
name: 'container-name'
}, function (err, container) {
if (err) {
console.error('err1 :' +err.message);
}
else {
for(var i in filelist) {
console.log('filelist[i].originalname :' +filelist[i].originalname)
var myFile = fs.createReadStream(filelist[i].path);
var upload = storageClient.upload({
container: container.name,
remote: filelist[i].originalname
});
upload.on('error', function(err) {
console.error(err);
});
upload.on('success', function(file) {
console.log(file.toJSON());
});
myFile.pipe(upload);
}
}
});
res.send('success');
});