Koa.js - Dosya Yükleme

Web uygulamalarının, dosya yüklemelerine izin verecek işlevselliği sağlaması gerekir. İstemcilerden nasıl dosya alıp sunucumuzda saklayabileceğimizi görelim.

Koa-body ara yazılımını istekleri ayrıştırmak için zaten kullandık. Bu ara yazılım, dosya yüklemelerini işlemek için de kullanılır. Dosyaları yüklememize ve ardından bu dosyaları Koa kullanarak kaydetmemize izin veren bir form oluşturalım. Önce adında bir şablon oluşturunfile_upload.pug aşağıdaki içeriklerle.

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")

Formunuzda yukarıdaki kodlama tipinin aynısını vermeniz gerektiğini unutmayın. Şimdi bu veriyi sunucumuzda ele alalım.

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);

Bunu çalıştırdığınızda aşağıdaki formu alırsınız.

Bunu gönderdiğinizde, konsolunuz aşağıdaki çıktıyı üretecektir.

Yüklenen dosyalar, yukarıdaki çıktıdaki yolda saklanır. Kullanarak istekteki dosyalara erişebilirsiniz.this.request.body.files ve bu istekteki alanlar tarafından this.request.body.fields.