1.在web start server 1中,koa2拓展了很多功能,比如get和post数据交互和静态资源访问配置,看起来确实是很不错了,但还是欠缺一些核心的功能的,这里继续解决欠缺的问题。

    2.图片上传到服务器(koa-multer),安装代码如下

    1. npm install multer

    3.引入模块

    1. const multer = require('koa-multer');

    3.配置上传信息,上传的时候在服务器创建文件的时候,需要知道存放位置和存放后文件名

    1. const upload = multer({ dest: 'public/' }); //配置存放位置
    2. router.post('/mians', upload.single('file'), function(ctx, next){
    3. ctx.body = ctx;
    4. });
    5. //upload.single('file') //这里的file对应客户端的name=‘file’,因为通过这个key去读值得,
    6. //但是在一些框架中不需要填写,koa-multer强制填写,不然就上传不上去
    7. //上面就单纯的解决了上传的存放文件夹,但是保存文件的时候并不能设置上传文件类型
    8. //上传的文件的文件名:4d6f9d0eba4843b9d2434de2cf15f4e6
    9. //正常的情况应该:4d6f9d0eba4843b9d2434de2cf15f4e6.png||...
    10. 所以还需要解决文件名问题

    4.解决上传文件名

    1. var storage = multer.diskStorage({
    2. //文件保存路径
    3. destination: function (req, file, cb) {
    4. cb(null, 'public/')
    5. },
    6. //修改文件名称
    7. filename: function (req, file, cb) {
    8. console.log(file);
    9. //上传的时候打印file信息如下:
    10. { fieldname: 'file',
    11. originalname: 'wxad17d555db856a24.o6zAJsza6mt-MUDO7W9s4SDSUxm0.Ci8sqRtARgBS989a10e83d85703b45d58c4441dacc10.png',
    12. encoding: '7bit',
    13. mimetype: 'image/png'
    14. }
    15. //第一种方式,对originalname处理,以点分割成数组,数组的最后一项就是后缀名
    16. // var fileFormat = (file.originalname).split(".");
    17. // cb(null,Date.now() + "." + fileFormat[fileFormat.length - 1]);
    18. //第二种方式,对mimetype处理
    19. 建议选择第二种方式处理,安全问题
    20. }
    21. })
    22. const upload = multer({"storage":storage}); //配置对象
    23. router.post('/mians', upload.single('file'), function(ctx, next){
    24. ctx.body = ctx;
    25. });

    5.完整案例

    1. const Koa = require('koa');
    2. const router = require('koa-router')();
    3. const postbody = require('koa-bodyparser');
    4. const static = require('koa-static');
    5. const multer = require('koa-multer');
    6. const app = new Koa();
    7. app.use(postbody());
    8. app.use(static( __dirname,'./public'));
    9. app.use(static( __dirname,'./logo'));
    10. var storage = multer.diskStorage({
    11. //文件保存路径
    12. destination: function (req, file, cb) {
    13. cb(null, 'public/')
    14. },
    15. //修改文件名称
    16. filename: function (req, file, cb) {
    17. var fileFormat = (file.originalname).split("."); //以点分割成数组,数组的最后一项就是后缀名
    18. cb(null,Date.now() + "." + fileFormat[fileFormat.length - 1]);
    19. }
    20. })
    21. const upload = multer({"storage":storage});
    22. router.post('/mians', upload.single('file'), function(ctx, next){
    23. ctx.body = ctx;
    24. });
    25. app.use(router.routes());
    26. app.use(router.allowedMethods());
    27. app.listen(3000);

    6.客户端请求:header

    1. header: {
    2. 'content-type': 'multipart/form-data' // 默认值
    3. },