* npm install

npm install --save koa-body

* index.js

const koaBody = require('koa-body');

koa.use(koaBody({
    multipart: true,
    formidable: {
        maxFileSize: 100 * 1024 * 1024 // 100M, default 2M
    }
}));

* router.js

router.post('/upload', (new TestController()).upload);

* ./app/controllers/TestController.js

var Controller = require('./BaseController');

function TestController() {
    Controller.call(this);
}

TestController.prototype = new Controller();

TestController.prototype.upload = async function(ctx, next) {
    const fs = require('fs');
    const path = require('path');

    const file = ctx.request.files.file;
    const reader = fs.createReadStream(file.path);
    let filePath = path.join("/home/ubuntu/upload/", file.name);
    const upStream = fs.createWriteStream(filePath);
    reader.pipe(upStream);

    ctx.body = {
        code: 0,
        data: filePath,
        message: "OK"
    }
};

module.exports = TestController;

 

test:

* index.html

<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>test upload</title>
</head>
<body>
<form action="http://192.168.4.157:8030/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file" id="file" value="" multiple="multiple" />
    <input type="submit" value="上传"/>
</form>
<p id="j_result"></p>
<script type="text/javascript" src="http://47.93.27.106/lib/jquery.js"></script>
<script>
    var form = document.getElementsByTagName("form")[0];
    form.onsubmit = function(e) {
        e.preventDefault();
        var that = this;
        $.ajax({
            type: 'POST',
            url: that.action,
            data: new FormData(that),
            // dataType: 'json',
            cache: false,
            processData: false,
            contentType: false
        }).done(function(data) {
            console.log(data);
            $("#j_result").html(JSON.stringify(data));
        }).fail(function(jqXHR, textStatus, errorThrown) {

        });
    }
</script>
</body>
</html>

* run:

node.js koa-body 上传文件, CORS_upload

查看上传的文件 

dir E:\home\ubuntu\upload

node.js koa-body 上传文件, CORS_koa-body_02

 

npm配置

npm config set registry https://registry.npm.taobao.org
npm config set disturl https://npm.taobao.org/mirrors/node

CORS 跨域配置
npm install koa2-cors --save

 

* ./config/cors.js

const cors = require('koa2-cors');

module.exports = function() {
    return cors({
        // origin: function(ctx) {
        //     if (ctx.url === 'api') {
        //         return '*';
        //     }
        //     return 'http://192.168.4.157:8030';
        // },
        origin: '*',
        exposeHeaders: ['WWW-Authenticate', 'Server-Authorization', 'Token'],
        maxAge: 5,
        credentials: true,
        allowMethods: ['GET', 'PUT', 'POST', 'DELETE', 'HEAD', 'OPTIONS'],
        allowHeaders: ['Content-Type', 'Authorization', 'Accept'],
    })
};

* index.js

const Koa = require('koa');

const koa = new Koa();

koa.use(require('./config/cors')());

const router = require('./router')();

koa.use(router.routes()).use(router.allowedMethods());