mirror of
https://github.com/strapi/strapi.git
synced 2025-07-15 13:02:42 +00:00
64 lines
1.6 KiB
JavaScript
64 lines
1.6 KiB
JavaScript
'use strict';
|
|
|
|
/**
|
|
* Module dependencies
|
|
*/
|
|
|
|
// Public node modules.
|
|
const pkgcloud = require('pkgcloud');
|
|
const streamifier = require('streamifier');
|
|
|
|
module.exports = {
|
|
init(config) {
|
|
const options = { container: config.container };
|
|
const client = pkgcloud.storage.createClient({
|
|
provider: 'rackspace',
|
|
...config,
|
|
});
|
|
|
|
const remoteURL = () =>
|
|
new Promise((resolve, reject) => {
|
|
return client.getContainer(config.container, (err, res) => {
|
|
if (err && !res) return reject(err);
|
|
return resolve(res);
|
|
});
|
|
});
|
|
|
|
return {
|
|
upload(file) {
|
|
const readStream = streamifier.createReadStream(file.buffer);
|
|
const writeStream = client.upload({
|
|
...options,
|
|
remote: file.hash,
|
|
contentType: file.mime,
|
|
});
|
|
|
|
return new Promise((resolve, reject) => {
|
|
readStream.pipe(writeStream);
|
|
writeStream.on('error', error => error && reject(error));
|
|
writeStream.on('success', result => {
|
|
remoteURL()
|
|
.then(data => {
|
|
resolve(
|
|
Object.assign(file, {
|
|
mime: result.contentType,
|
|
url: `${data.cdnSslUri}/${result.name}`,
|
|
})
|
|
);
|
|
})
|
|
.catch(err => console.error(err) && reject(err));
|
|
});
|
|
});
|
|
},
|
|
delete(file) {
|
|
return new Promise((resolve, reject) => {
|
|
client.removeFile(config.container, file.hash, error => {
|
|
if (error) return reject(error);
|
|
return resolve();
|
|
});
|
|
});
|
|
},
|
|
};
|
|
},
|
|
};
|