@@ -16,23 +16,14 @@ const { serialize } = require('pull-ndjson')
16
16
const streams = [ ]
17
17
const filesDir = tempy . directory ( )
18
18
19
- const responseError = ( msg , code , request , abortStream ) => {
20
- const err = JSON . stringify ( { Message : msg , Code : code } )
21
- request . raw . res . addTrailers ( {
22
- 'X-Stream-Error' : err
23
- } )
24
- abortStream . abort ( )
25
- }
26
- const createMultipartStream = ( readStream , boundary , ipfs , request , reply , cb ) => {
19
+ const createMultipartReply = ( readStream , boundary , ipfs , query , reply ) => {
27
20
const fileAdder = pushable ( )
28
21
const parser = new multipart . Parser ( { boundary : boundary } )
29
- let filesParsed = false
30
22
31
23
readStream . pipe ( parser )
32
24
33
25
parser . on ( 'file' , ( fileName , fileStream ) => {
34
26
console . log ( 'File: ' , fileName )
35
- filesParsed = true
36
27
fileAdder . push ( {
37
28
path : decodeURIComponent ( fileName ) ,
38
29
content : toPull ( fileStream )
@@ -49,15 +40,10 @@ const createMultipartStream = (readStream, boundary, ipfs, request, reply, cb) =
49
40
parser . on ( 'end' , ( ) => {
50
41
console . log ( 'multipart end' )
51
42
fileAdder . end ( )
52
- if ( ! filesParsed ) {
53
- reply ( {
54
- Message : "File argument 'data' is required." ,
55
- Code : 0 ,
56
- Type : 'error'
57
- } ) . code ( 400 ) . takeover ( )
58
- }
59
43
} )
60
44
45
+ // TODO: handle multipart errors
46
+
61
47
const pushStream = pushable ( )
62
48
const abortStream = abortable ( )
63
49
const replyStream = toStream . source ( pull (
@@ -77,34 +63,35 @@ const createMultipartStream = (readStream, boundary, ipfs, request, reply, cb) =
77
63
reply ( replyStream )
78
64
. header ( 'x-chunked-output' , '1' )
79
65
. header ( 'content-type' , 'application/json' )
80
- . header ( 'Trailer' , 'X-Stream-Error' )
81
66
82
67
const progressHandler = ( bytes ) => {
83
68
pushStream . push ( { Bytes : bytes } )
84
69
}
85
70
// ipfs add options
86
71
const options = {
87
- cidVersion : request . query [ 'cid-version' ] ,
88
- rawLeaves : request . query [ 'raw-leaves' ] ,
89
- progress : request . query . progress ? progressHandler : null ,
90
- onlyHash : request . query [ 'only-hash' ] ,
91
- hashAlg : request . query . hash ,
92
- wrapWithDirectory : request . query [ 'wrap-with-directory' ] ,
93
- pin : request . query . pin ,
94
- chunker : request . query . chunker
72
+ cidVersion : query [ 'cid-version' ] ,
73
+ rawLeaves : query [ 'raw-leaves' ] ,
74
+ progress : query . progress ? progressHandler : null ,
75
+ onlyHash : query [ 'only-hash' ] ,
76
+ hashAlg : query . hash ,
77
+ wrapWithDirectory : query [ 'wrap-with-directory' ] ,
78
+ pin : query . pin ,
79
+ chunker : query . chunker
95
80
}
96
81
97
82
pull (
98
83
fileAdder ,
99
84
ipfs . files . addPullStream ( options ) ,
100
85
pull . collect ( ( err , files ) => {
101
86
if ( err ) {
102
- return responseError ( err . msg , 0 , request )
103
- }
104
- if ( files . length === 0 ) {
105
- return responseError ( 'Failed to add files.' , 0 , request )
87
+ pushStream . push ( {
88
+ Message : err . toString ( ) ,
89
+ Code : 0 ,
90
+ Type : 'error'
91
+ } )
92
+ pushStream . end ( )
93
+ return
106
94
}
107
- console . log ( files )
108
95
files . forEach ( ( f ) => pushStream . push ( f ) )
109
96
pushStream . end ( )
110
97
} )
@@ -216,7 +203,7 @@ module.exports = (server) => {
216
203
stream . on ( 'finish' , function ( ) {
217
204
console . log ( 'add to ipfs from the file' )
218
205
var readStream = fs . createReadStream ( file )
219
- createMultipartStream ( readStream , boundary , ipfs , request , reply )
206
+ createMultipartReply ( readStream , boundary , ipfs , request . query , reply )
220
207
} )
221
208
222
209
stream . end ( )
0 commit comments