mirror of
				https://github.com/strapi/strapi.git
				synced 2025-10-31 18:08:11 +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();
 | |
|           });
 | |
|         });
 | |
|       },
 | |
|     };
 | |
|   },
 | |
| };
 | 
