@@ -16,23 +16,14 @@ const { serialize } = require('pull-ndjson')
1616const streams = [ ]
1717const filesDir = tempy . directory ( )
1818
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 ) => {
2720 const fileAdder = pushable ( )
2821 const parser = new multipart . Parser ( { boundary : boundary } )
29- let filesParsed = false
3022
3123 readStream . pipe ( parser )
3224
3325 parser . on ( 'file' , ( fileName , fileStream ) => {
3426 console . log ( 'File: ' , fileName )
35- filesParsed = true
3627 fileAdder . push ( {
3728 path : decodeURIComponent ( fileName ) ,
3829 content : toPull ( fileStream )
@@ -49,15 +40,10 @@ const createMultipartStream = (readStream, boundary, ipfs, request, reply, cb) =
4940 parser . on ( 'end' , ( ) => {
5041 console . log ( 'multipart end' )
5142 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- }
5943 } )
6044
45+ // TODO: handle multipart errors
46+
6147 const pushStream = pushable ( )
6248 const abortStream = abortable ( )
6349 const replyStream = toStream . source ( pull (
@@ -77,34 +63,35 @@ const createMultipartStream = (readStream, boundary, ipfs, request, reply, cb) =
7763 reply ( replyStream )
7864 . header ( 'x-chunked-output' , '1' )
7965 . header ( 'content-type' , 'application/json' )
80- . header ( 'Trailer' , 'X-Stream-Error' )
8166
8267 const progressHandler = ( bytes ) => {
8368 pushStream . push ( { Bytes : bytes } )
8469 }
8570 // ipfs add options
8671 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
9580 }
9681
9782 pull (
9883 fileAdder ,
9984 ipfs . files . addPullStream ( options ) ,
10085 pull . collect ( ( err , files ) => {
10186 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
10694 }
107- console . log ( files )
10895 files . forEach ( ( f ) => pushStream . push ( f ) )
10996 pushStream . end ( )
11097 } )
@@ -216,7 +203,7 @@ module.exports = (server) => {
216203 stream . on ( 'finish' , function ( ) {
217204 console . log ( 'add to ipfs from the file' )
218205 var readStream = fs . createReadStream ( file )
219- createMultipartStream ( readStream , boundary , ipfs , request , reply )
206+ createMultipartReply ( readStream , boundary , ipfs , request . query , reply )
220207 } )
221208
222209 stream . end ( )
0 commit comments