2012-02-17 19 views
17

Cómo se envían archivos en node.js/express.Cómo enviar archivos con node.js

Estoy usando Rackspace Cloudfiles y quiero enviar imágenes/videos a su almacenamiento remoto, pero no estoy seguro de que sea tan simple como leer el archivo (fs.readFileSync()) y enviar los datos en el cuerpo de la solicitud, o ¿eso?

¿Cuáles deberían ser los encabezados?

¿Qué pasa si se trata de un archivo muy grande en un par de GB?

¿Es posible usar superagent (http://visionmedia.github.com/superagent) para esto o hay una mejor biblioteca para enviar archivos?

Por favor, dame algo de información sobre esto.

Gracias!

Respuesta

5

estoy usando Rackspace CloudFiles y quiero enviar imágenes/vídeos a su almacenamiento remoto pero no estoy seguro de que es tan simple como leer el archivo (fs.readFileSync()) y enviar los datos en el cuerpo de la petición, ¿O es eso?

Usted debe Nunca uso fs.readFileSync en general. Cuando lo utiliza, o cualquier otro método llamado somethingSync, bloquea el servidor completo durante la duración de esa llamada. El solo tiempo aceptable para realizar llamadas sincrónicas en un programa node.js es durante el inicio.

¿Cuáles deberían ser los encabezados?

Ver RackSpace Cloud Files API.

¿Es posible usar superagent (http://visionmedia.github.com/superagent) para esto o hay una mejor biblioteca para enviar archivos?

Aunque no tengo ninguna experiencia con superagente, estoy seguro de que funcionará bien. Solo asegúrese de leer la documentación de la API y hacer sus solicitudes de acuerdo con sus especificaciones.

4

Para archivos de gran tamaño, querrá usar el concepto node.js de canalizar flujos IO juntos. Desea abrir el archivo local para leer, iniciar la solicitud HTTP en el espacio en bastidor y luego canalizar los eventos de datos desde el proceso de lectura del archivo al proceso de solicitud HTTP.

Here's an article on how to do this.

Superagent está bien para archivos pequeños, pero debido a que la API superagente presupone que todo su cuerpo de solicitud se carga en la memoria antes de iniciar la solicitud, no es el mejor enfoque para grandes transferencias de archivos.

Normalmente no tendrá que preocuparse específicamente por los encabezados de solicitud ya que la biblioteca de solicitudes HTTP del nodo le enviará los encabezados correspondientes. Solo asegúrate de usar el método HTTP que tu API requiera (probablemente POST), y parece que para el espacio de racks necesitarás agregar el encabezado extra X-Auth-Token con tu token 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" está en desuso.

+6

expreso obsoleto res.sendfile: Use res.sendFile en su lugar – NuclearPeon

+0

Si la ruta necesita ser relativa, necesita usar var path = require ('ruta'); router.get ('/ GetAudio', función (req, res, siguiente) { res.sendFile (__ dirname + "/public/img/background.png"); }); – Mahesh

+0

¿Cuál es el objetivo de esto? Simplemente está creando un alias, pero podrías haber movido el archivo a esa ubicación – kim366

Cuestiones relacionadas