@@ -6,11 +6,12 @@ const fs = require('fs');
6
6
const path = require ( 'path' ) ;
7
7
const request = require ( 'request' ) ;
8
8
const faker = require ( 'faker' ) ;
9
+ const mime = require ( 'mime/lite' ) ;
9
10
10
11
module . exports = function ( options = [ ] ) { // eslint-disable-line no-unused-vars
11
12
return function async ( hook ) {
12
13
13
- return new Promise ( ( resolve ) => {
14
+ return new Promise ( ( resolve , reject ) => {
14
15
15
16
let urls = [ ] ;
16
17
@@ -35,25 +36,46 @@ module.exports = function (options = []) { // eslint-disable-line no-unused-vars
35
36
imgCount ++ ;
36
37
// TODO: fix that to use the data _id or somethink similar
37
38
let uuid = faker . fake ( '{{random.uuid}}' ) ;
38
- const imgName = `${ field } _${ uuid } .jpg` ;
39
- const imgPath = path . resolve ( 'public' , 'uploads/' + imgName ) ;
40
- let stream = fs . createWriteStream ( imgPath ) ;
41
- urls . push ( imgPath ) ;
42
- stream . on ( 'close' , ( ) => {
43
- if ( -- loading <= 0 ) {
44
- hook . app . debug ( 'Download(s) finished' , imgName ) ;
45
- resolve ( hook ) ;
46
- } else {
47
- hook . app . debug ( 'Download finished' , imgName ) ;
39
+ const imgName = `${ field } _${ uuid } ` ;
40
+ let imgPath = path . resolve ( 'public' , 'uploads/' + imgName ) ;
41
+
42
+ request ( {
43
+ url : hook . data [ field ] ,
44
+ encoding : null
45
+ } , ( err , res , body ) => {
46
+ if ( err ) {
47
+ hook . app . error ( err ) ;
48
+ reject ( err ) ;
49
+ }
50
+ try {
51
+ const mimeType = res . headers [ 'content-type' ] ;
52
+ if ( mimeType . indexOf ( 'image' ) !== 0 ) {
53
+ hook . app . error ( 'its not an image' ) ;
54
+ reject ( 'its not an image' ) ;
55
+ }
56
+
57
+ const ext = mime . getExtension ( mimeType ) ;
58
+
59
+ imgPath += `.${ ext } ` ;
60
+
61
+ fs . writeFileSync ( imgPath , body , {
62
+ encoding : 'binary'
63
+ } ) ;
64
+
65
+ loading -- ;
66
+
67
+ hook . data [ field ] = uploadsUrl + imgName + `.${ ext } ` ;
68
+
69
+ if ( imgCount > 0 && loading <= 0 ) {
70
+ hook . app . debug ( 'Download(s) finished' , urls ) ;
71
+ resolve ( hook ) ;
72
+ }
73
+ } catch ( err ) {
74
+ hook . app . error ( err ) ;
48
75
}
49
76
} ) ;
50
- stream . on ( 'error' , ( err ) => {
51
- // reject(err);
52
- throw new errors . Unprocessable ( 'Thumbnail download failed' , { errors : err , urls : urls } ) ;
53
- } ) ;
77
+
54
78
hook . app . debug ( 'Downloading' , hook . data [ field ] ) ;
55
- request ( hook . data [ field ] ) . pipe ( stream ) ;
56
- hook . data [ field ] = uploadsUrl + imgName ;
57
79
} ) ;
58
80
59
81
if ( imgCount > 0 && loading <= 0 ) {
0 commit comments