2012-02-17 16 views
17

Come si inviano file su node.js/express.Come inviare file con node.js

Sto usando Rackspace Cloudfiles e voglio inviare immagini/video per la loro archiviazione remota, ma io non sono sicuro che sia così semplice come la lettura del file (fs.readFileSync()) e inviare i dati nel corpo della richiesta, o è vero?

Quali dovrebbero essere le intestazioni.

E se si tratta di un file molto grande su un paio di GB?

È possibile utilizzare superagent (http://visionmedia.github.com/superagent) per questo oppure esiste una libreria migliore per l'invio di file?

Per favore dammi alcune informazioni a riguardo.

Grazie!

risposta

5

Sto usando Rackspace Cloudfiles e voglio inviare immagini/video per la loro archiviazione remota, ma io non sono sicuro che sia così semplice come la lettura del file (fs.readFileSync()) e inviare i dati nel corpo della richiesta, o è?

Si dovrebbe mai uso fs.readFileSync in generale. Quando lo usi, o qualsiasi altro metodo chiamato somethingSync, blocchi l'intero server per la durata di quella chiamata. Il solo tempo accettabile per effettuare chiamate sincrone in un programma node.js è durante l'avvio.

Quali dovrebbero essere le intestazioni.

Vedere RackSpace Cloud Files API.

È possibile utilizzare superagent (http://visionmedia.github.com/superagent) per questo oppure esiste una libreria migliore per l'invio di file?

Mentre non ho alcuna esperienza con superagent, sono sicuro che funzionerà bene. Assicurati solo di leggere la documentazione dell'API e di soddisfare le tue richieste in base alle loro specifiche.

4

Per i file di grandi dimensioni, è consigliabile utilizzare il concetto node.js di convogliare insieme i flussi di I/O. Si desidera aprire il file locale per la lettura, avviare la richiesta HTTP su rackspace e quindi reindirizzare gli eventi di dati dal processo di lettura file al processo di richiesta HTTP.

Here's an article on how to do this.

Superagent va bene per file di piccole dimensioni, ma poiché l'API superagente presume che l'intero corpo della richiesta viene caricato in memoria prima di avviare la richiesta, non è l'approccio migliore per i trasferimenti di file di grandi dimensioni.

Normalmente non è necessario preoccuparsi in modo specifico delle intestazioni delle richieste poiché la libreria di richieste HTTP del nodo invierà le intestazioni appropriate per l'utente. Assicurati di utilizzare qualsiasi metodo HTTP richiesto dalla tua API (probabilmente POST), e sembra che per il rackspace sia necessario aggiungere anche l'intestazione aggiuntiva X-Auth-Token con il token dell'API.

36
app.get('/img/bg.png', function(req, res) { 
    res.sendFile('public/img/background.png') 
}) 

http://expressjs.com/api.html#res.sendfile

uso "res.sendFile". "res.sendfile" è deprecato.

+6

espr.sendfile deprecato express: utilizzare res.sendFile invece – NuclearPeon

+0

Se il percorso deve essere relativo, è necessario utilizzare var path = require ('percorso'); router.get ('/ GetAudio', funzione (req, res, next) { res.sendFile (__ dirname + "/public/img/background.png"); }); – Mahesh

+0

Qual è il punto di questo? Sta solo creando un alias, ma avresti potuto semplicemente spostare il file in quella posizione – kim366

Problemi correlati