2012-01-11 8 views
13

Estoy buscando usar NodeJS para actuar como el servidor para construir una API.Use NodeJS para subir archivos en una llamada API

Idealmente, me encantaría que haya un punto final API para enviar un conjunto de información, así como un archivo que se puede guardar en el sistema de archivos.

La mayoría de los ejemplos que he visto son para enviar un archivo a través de un formulario; sin embargo, me gustaría hacerlo a través de una solicitud posterior.

¿Alguien sabe cómo podría lograr esto (si es posible)?

Por el momento lo que me gustaría lograr es algo a lo largo de las siguientes líneas:

app.post('/Some/Endpoint/', controller.handleSomeEndpoint, function(request, response) { 
    response.send('Finished Request'); 
}); 

exports.handleSomeEndpoint = function(request, response, next) { 
    var bodyarr = [] 
    request.on('data', function(chunk){ 
     bodyarr.push(chunk); 
    }) 
    request.on('end', function(){ 
     console.log(bodyarr.join('')); 
    }) 
} 

embargo, los datos y al final no se llama si se ejecuto un comando curl lo largo de las líneas de:

curl http://127.0.0.1:5000/Some/Endpoint/ -F '[email protected]_file' 

Saludos, Matt

+1

Un formulario es una solicitud POST al enviar archivos. El lado del nodo de las cosas no debería ser diferente. – Paul

+1

¿Pero cómo crear un req.files sin un formulario? ¿Algún ejemplo? –

Respuesta

4

La respuesta parece ser que expressJS no utiliza el mismo método de manejar un archivo puesto que el módulo HTTP en nodejs.

Todo lo que se necesita es que incluye un directorio para los archivos que se escriben en:

app.use(express.bodyParser({uploadDir:'./uploads'})); 

Lo que me pareció aquí:

http://www.hacksparrow.com/handle-file-uploads-in-express-node-js.html

+0

De esta manera, cada vez que le envíe un archivo a través de una solicitud POST, lo aceptará y guardará en su ./uploads. No creo que sea seguro. – nick

+0

No creo que sea inseguro en el sentido de que es un almacenamiento temporal, no permanente, lo que significa que, aunque sea aceptado, no significa que se haya almacenado permanentemente o usado. La solicitud debe ser autenticada (que en mi caso sí lo es). –

+0

¿Pero cómo pasar un archivo requerido si no se utiliza el formulario? Intento subir archivos solo a través de API. –

0

El código debería funcionar bien; es el uso del curl lo que está mal. Tal vez puedas probar:

$ curl -X POST --data-binary @test_file http://localhost:8080 
+0

esto realmente arruina el archivo ... – Devenv

2

Yo sugeriría que usted utilice Formidable para evitar carga de archivos anónimos.

Cuestiones relacionadas