@@ -424,35 +424,80 @@ async function upload(element, data) {
424
424
425
425
for ( let input of inputs ) {
426
426
let Data = Elements . getObject ( input ) ;
427
- if ( Data . type ) {
428
- if ( input . getFilter )
429
- Data . $filter = await input . getFilter ( )
427
+ let key = getAttribute ( 'key' )
428
+ if ( Data . type === 'key' )
429
+ Data . type = 'object'
430
430
431
- let files = await getFiles ( input )
431
+ Data . method = Data . type + '.update'
432
+ if ( Data . array )
433
+ Data . array = 'files'
432
434
433
- let key = getAttribute ( 'key' )
434
- if ( Data . type === 'key' )
435
- Data . type = 'object'
435
+ let path = input . getAttribute ( 'path' )
436
+ let directory = '/'
437
+
438
+ if ( path ) {
439
+ directory = path . split ( '/' ) ;
440
+ directory = directory [ directory . length - 1 ] ;
441
+ if ( ! path . endswith ( '/' ) )
442
+ path += '/'
443
+ } else
444
+ path = directory = '/'
436
445
437
- let object = input . getAttribute ( 'object' )
438
- if ( key ) {
439
- Data [ Data . type ] = { _id : object , [ key ] : files }
440
- } else {
441
- Data [ Data . type ] = files
446
+ if ( input . getFilter ) {
447
+ Data . $filter = await input . getFilter ( )
448
+ if ( ! Data . $filter . query )
449
+ Data . $filter . query = { }
450
+ } else
451
+ Data . $filter = {
452
+ query : { }
442
453
}
443
454
444
- Data . method = Data . type + '.update'
445
- let response = await Crud . send ( Data ) ( {
446
- array,
447
- object,
448
- upsert : true
449
- } ) ;
450
455
451
- data . push ( response )
452
- if ( response && ( ! object || object !== response . object ) ) {
453
- Elements . setTypeValue ( element , response ) ;
456
+ let files = await getFiles ( input )
457
+ let segmentSize = 10 * 1024 * 1024
458
+ for ( let i = 0 ; i < files . length ; i ++ ) {
459
+ files [ i ] . path = path
460
+ files [ i ] . pathname = path + '/' + files [ i ] . name
461
+ files [ i ] . directory = directory
462
+
463
+
464
+ if ( files [ i ] . size > segmentSize ) {
465
+ let { streamConfig, segments } = await processFile ( files [ i ] , null , segmentSize ) ;
466
+ files [ i ] . src = streamConfig
467
+ for ( let j = 0 ; j < segments . length ; j ++ ) {
468
+ segments [ j ] . path = path
469
+ segments [ j ] . pathname = path + '/' + segments [ j ] . name
470
+ segments [ j ] . directory = directory
471
+
472
+ Data . $filter . query . pathname = segments [ j ] . pathname
473
+ Crud . send ( {
474
+ ...Data ,
475
+ object : segments [ j ] ,
476
+ upsert : true
477
+ } ) ;
478
+ }
479
+
454
480
}
455
481
}
482
+
483
+ let object = input . getAttribute ( 'object' )
484
+ if ( key ) {
485
+ Data [ Data . type ] = { _id : object , [ key ] : files }
486
+ } else {
487
+ Data [ Data . type ] = files
488
+ }
489
+
490
+ // Data.$filter.query.pathname = files[i].pathname
491
+
492
+ let response = await Crud . send ( {
493
+ ...Data ,
494
+ upsert : true
495
+ } ) ;
496
+
497
+ data . push ( response )
498
+ if ( response && ( ! object || object !== response . object ) ) {
499
+ Elements . setTypeValue ( element , response ) ;
500
+ }
456
501
}
457
502
458
503
let queriedElements = queryElements ( { element : element [ i ] , prefix : 'upload' } )
0 commit comments