mirror of
				https://github.com/strapi/strapi.git
				synced 2025-11-04 11:54:10 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			110 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
'use strict';
 | 
						|
 | 
						|
/**
 | 
						|
 * Module dependencies
 | 
						|
 */
 | 
						|
 | 
						|
/* eslint-disable import/no-unresolved */
 | 
						|
/* eslint-disable no-unused-vars */
 | 
						|
// Public node modules.
 | 
						|
const _ = require('lodash');
 | 
						|
const AWS = require('aws-sdk');
 | 
						|
 | 
						|
module.exports = {
 | 
						|
  provider: 'aws-s3',
 | 
						|
  name: 'Amazon Web Service S3',
 | 
						|
  auth: {
 | 
						|
    public: {
 | 
						|
      label: 'Access API Token',
 | 
						|
      type: 'text'
 | 
						|
    },
 | 
						|
    private: {
 | 
						|
      label: 'Secret Access Token',
 | 
						|
      type: 'text'
 | 
						|
    },
 | 
						|
    region: {
 | 
						|
      label: 'Region',
 | 
						|
      type: 'enum',
 | 
						|
      values: [
 | 
						|
        'us-east-1',
 | 
						|
        'us-east-2',
 | 
						|
        'us-west-1',
 | 
						|
        'us-west-2',
 | 
						|
        'ca-central-1',
 | 
						|
        'ap-south-1',
 | 
						|
        'ap-northeast-1',
 | 
						|
        'ap-northeast-2',
 | 
						|
        'ap-northeast-3',
 | 
						|
        'ap-southeast-1',
 | 
						|
        'ap-southeast-2',
 | 
						|
        'cn-north-1',
 | 
						|
        'cn-northwest-1',
 | 
						|
        'eu-central-1',
 | 
						|
        'eu-north-1',
 | 
						|
        'eu-west-1',
 | 
						|
        'eu-west-2',
 | 
						|
        'eu-west-3',
 | 
						|
        'sa-east-1'
 | 
						|
      ]
 | 
						|
    },
 | 
						|
    bucket: {
 | 
						|
      label: 'Bucket',
 | 
						|
      type: 'text'
 | 
						|
    }
 | 
						|
  },
 | 
						|
  init: (config) => {
 | 
						|
    // configure AWS S3 bucket connection
 | 
						|
    AWS.config.update({
 | 
						|
      accessKeyId: config.public,
 | 
						|
      secretAccessKey: config.private,
 | 
						|
      region: config.region
 | 
						|
    });
 | 
						|
 | 
						|
    const S3 = new AWS.S3({
 | 
						|
      apiVersion: '2006-03-01',
 | 
						|
      params: {
 | 
						|
        Bucket: config.bucket
 | 
						|
      }
 | 
						|
    });
 | 
						|
 | 
						|
    return {
 | 
						|
      upload: (file) => {
 | 
						|
        return new Promise((resolve, reject) => {
 | 
						|
          // upload file on S3 bucket
 | 
						|
          const path = file.path ? `${file.path}/` : '';
 | 
						|
          S3.upload({
 | 
						|
            Key: `${path}${file.hash}${file.ext}`,
 | 
						|
            Body: new Buffer(file.buffer, 'binary'),
 | 
						|
            ACL: 'public-read',
 | 
						|
            ContentType: file.mime,
 | 
						|
          }, (err, data) => {
 | 
						|
            if (err) {
 | 
						|
              return reject(err);
 | 
						|
            }
 | 
						|
 | 
						|
            // set the bucket file url
 | 
						|
            file.url = data.Location;
 | 
						|
 | 
						|
            resolve();
 | 
						|
          });
 | 
						|
        });
 | 
						|
      },
 | 
						|
      delete: (file) => {
 | 
						|
        return new Promise((resolve, reject) => {
 | 
						|
          // delete file on S3 bucket
 | 
						|
          const path = file.path ? `${file.path}/` : '';
 | 
						|
          S3.deleteObject({
 | 
						|
            Key: `${path}${file.hash}${file.ext}`
 | 
						|
          }, (err, data) => {
 | 
						|
            if (err) {
 | 
						|
              return reject(err);
 | 
						|
            }
 | 
						|
 | 
						|
            resolve();
 | 
						|
          });
 | 
						|
        });
 | 
						|
      }
 | 
						|
    };
 | 
						|
  }
 | 
						|
};
 |