@@ -48,38 +48,61 @@ export class S3Adapter extends FilesAdapter {
4848 } ;
4949 AWS . config . _region = this . _region ;
5050 this . _s3Client = new AWS . S3 ( s3Options ) ;
51+ this . _hasBucket = false ;
52+ }
53+
54+ createBucket ( ) {
55+ var promise ;
56+ if ( this . _hasBucket ) {
57+ promise = Promise . resolve ( ) ;
58+ } else {
59+ promise = new Promise ( ( resolve , reject ) => {
60+ this . _s3Client . createBucket ( ( ) => {
61+ this . _hasBucket = true ;
62+ resolve ( ) ;
63+ } ) ;
64+ } ) ;
65+ }
66+ return promise ;
5167 }
5268
5369 // For a given config object, filename, and data, store a file in S3
5470 // Returns a promise containing the S3 object creation response
55- createFile ( config , filename , data ) {
71+ createFile ( config , filename , data , contentType ) {
5672 let params = {
5773 Key : this . _bucketPrefix + filename ,
5874 Body : data
5975 } ;
6076 if ( this . _directAccess ) {
6177 params . ACL = "public-read"
6278 }
63- return new Promise ( ( resolve , reject ) => {
64- this . _s3Client . upload ( params , ( err , data ) => {
65- if ( err !== null ) {
66- return reject ( err ) ;
67- }
68- resolve ( data ) ;
79+ if ( contentType ) {
80+ params . ContentType = contentType ;
81+ }
82+ return this . createBucket ( ) . then ( ( ) => {
83+ return new Promise ( ( resolve , reject ) => {
84+ this . _s3Client . upload ( params , ( err , data ) => {
85+ if ( err !== null ) {
86+ return reject ( err ) ;
87+ }
88+ resolve ( data ) ;
89+ } ) ;
6990 } ) ;
7091 } ) ;
7192 }
7293
7394 deleteFile ( config , filename ) {
74- return new Promise ( ( resolve , reject ) => {
75- let params = {
76- Key : this . _bucketPrefix + filename
77- } ;
78- this . _s3Client . deleteObject ( params , ( err , data ) => {
79- if ( err !== null ) {
80- return reject ( err ) ;
81- }
82- resolve ( data ) ;
95+ return this . createBucket ( ) . then ( ( ) => {
96+ return new Promise ( ( resolve , reject ) => {
97+ let params = {
98+ Key : this . _bucketPrefix + filename
99+ } ;
100+ this . _s3Client . deleteObject ( params , ( err , data ) => {
101+ if ( err !== null ) {
102+ return reject ( err ) ;
103+ }
104+ resolve ( data ) ;
105+ } ) ;
83106 } ) ;
84107 } ) ;
85108 }
@@ -88,12 +111,18 @@ export class S3Adapter extends FilesAdapter {
88111 // Returns a promise that succeeds with the buffer result from S3
89112 getFileData ( config , filename ) {
90113 let params = { Key : this . _bucketPrefix + filename } ;
91- return new Promise ( ( resolve , reject ) => {
92- this . _s3Client . getObject ( params , ( err , data ) => {
93- if ( err !== null ) {
94- return reject ( err ) ;
95- }
96- resolve ( data . Body ) ;
114+ return this . createBucket ( ) . then ( ( ) => {
115+ return new Promise ( ( resolve , reject ) => {
116+ this . _s3Client . getObject ( params , ( err , data ) => {
117+ if ( err !== null ) {
118+ return reject ( err ) ;
119+ }
120+ // Something happend here...
121+ if ( data && ! data . Body ) {
122+ return reject ( data ) ;
123+ }
124+ resolve ( data . Body ) ;
125+ } ) ;
97126 } ) ;
98127 } ) ;
99128 }
0 commit comments