Come analizzare separatamente i dati del campo / file multipart?

9

Voglio analizzare un modulo multiparte due volte: una volta per afferrare i campi in arrivo e successivamente per elaborare il caricamento del file.

Sto cercando di mantenere un'adeguata separazione delle preoccupazioni all'interno della mia app Node:

  • Il controller è responsabile della gestione dei campi in arrivo.
  • Il modello è responsabile della logica del file di caricamento.

Ho bisogno di passare i dati dei campi nel modello per creare una nuova istanza, quindi i dati dei campi devono essere disponibili prima si avvia il caricamento del file.

Attualmente ogni form.parse() o una funzione equivalente analizza sia i campi che i file insieme . Esempio: req.pipe(busboy) gestisce insieme file e campi.

Ho controllato moduli come node-multiparty, formidable, busboy, multer. Nessuno sembra avere una soluzione per questo.

Un esempio di ciò che vorrei ottenere è qui: link

È persino possibile?

    
posta Scott 15.05.2014 - 16:47
fonte

1 risposta

1

Voglio rispondere a questa domanda:

Is it possible, to read the multipart field headers before their content?

Quando guardo multipart rfc , vedo questo esempio:

From:  Nathaniel Borenstein <[email protected]> 
To: Ned Freed <[email protected]> 
Subject: Formatted text mail 
MIME-Version: 1.0 
Content-Type: multipart/alternative; boundary=boundary42 


--boundary42 
Content-Type: text/plain; charset=us-ascii 

...plain text version of message goes here.... 

--boundary42 
Content-Type: text/richtext 

.... richtext version of same message goes here ... 
--boundary42 
Content-Type: text/x-whatever 

.... fanciest formatted version of same  message  goes  here 
... 
--boundary42-- 

Ho notato che le intestazioni come Content-Type si trovano tra le parti del corpo. Quindi concludo, non puoi tutti gli header prima di tutti i corpi.

Ora alla tua domanda:

I want to parse a multipart form twice: once to grab the incoming fields, and later to process the file upload.

Dipende da cosa intendi per "parsing". C'è un po 'di analisi durante la lettura del messaggio HTTP per sapere quando finisce. Alla fine ha un -- aggiuntivo alla fine:

--boundary42--

Idee per l'analisi due volte:

  • Concludo, uno dovrebbe essere in grado di copiare l'intera risposta dal socket e fare l'analisi più tardi.
  • Puoi leggere le intestazioni del file prima del corpo del file ma non tutte le intestazioni di tutti i file.

Is this even possible?

Sì, ci sono casi in cui è possibile (quando il file è l'ultima cosa che carichi). Non so se è universalmente possibile ciò di cui hai bisogno in quanto non so esattamente cosa vuoi fare.

Spero che questo chiarisca le cose. Se questa non è una risposta completa o non ti piace, ti preghiamo di spiegarci perché questo potrebbe essere un valido feedback per gli altri che cercano di rispondere alla domanda.

    
risposta data 10.09.2017 - 20:23
fonte

Leggi altre domande sui tag