Koa.js - Carga de archivos
Las aplicaciones web deben proporcionar la funcionalidad para permitir la carga de archivos. Veamos cómo podemos recibir archivos de los clientes y almacenarlos en nuestro servidor.
Ya hemos utilizado el middleware koa-body para analizar solicitudes. Este middleware también se utiliza para gestionar la carga de archivos. Creemos un formulario que nos permita cargar archivos y luego guardar estos archivos usando Koa. Primero crea una plantilla llamadafile_upload.pug con los siguientes contenidos.
html
head
title File uploads
body
form(action = "/upload" method = "POST" enctype = "multipart/form-data")
div
input(type = "text" name = "name" placeholder = "Name")
div
input(type = "file" name = "image")
div
input(type = "submit")
Tenga en cuenta que debe proporcionar el mismo tipo de codificación que el anterior en su formulario. Ahora manejemos estos datos en nuestro servidor.
var koa = require('koa');
var router = require('koa-router');
var bodyParser = require('koa-body');
var app = koa();
//Set up Pug
var Pug = require('koa-pug');
var pug = new Pug({
viewPath: './views',
basedir: './views',
app: app
});
//Set up body parsing middleware
app.use(bodyParser({
formidable:{uploadDir: './uploads'}, //This is where the files would come
multipart: true,
urlencoded: true
}));
var _ = router(); //Instantiate the router
_.get('/files', renderForm);
_.post('/upload', handleForm);
function * renderForm(){
this.render('file_upload');
}
function *handleForm(){
console.log("Files: ", this.request.body.files);
console.log("Fields: ", this.request.body.fields);
this.body = "Received your data!"; //This is where the parsed request is stored
}
app.use(_.routes());
app.listen(3000);
Cuando ejecuta esto, obtiene el siguiente formulario.
Cuando envíe esto, su consola producirá el siguiente resultado.
Los archivos que se cargaron se almacenan en la ruta en la salida anterior. Puede acceder a los archivos de la solicitud utilizandothis.request.body.files y los campos en esa solicitud por this.request.body.fields.