koa-body 怎么获取到前端页面文件上传的信息?

先简单描述一下项目吧

  • view层 angualr.js 6.x版本的spa应用
  • angular会直接调用node的api接口,由node去调用服务,进行增删改查的操作
  • node版本 8.11.x 主要使用了koa2框架和koa-body(^4.0.4),koa-router(^7.1.1)作为请求解析

需求如下

  • 现在有一个文件上传需求,但是node仅仅作为转发,并不实际保存文件,而是调用服务api进行操作
// angular 部分代码
let formData:FormData = new FormData();
    formData.append('file',this.fileData);  // this.file为从input file 获取到的文件信息
    formData.append('name','张三');
    this.http.upload('assets/upload/add',formData, (data) => {
      console.log(data)
    }, (error) => {

    });
// node端部分代码
const koaBody = require('koa-body');    
app.use(koaBody(
    multipart: true,
    formidable: {
      maxFileSize: 200 * 1024 * 1024 // 设置上传文件大小最大限制,默认2M
    }
));

router.post('/upload/add', async (ctx, next) => {
  console.log(ctx.request.files);  // undefined
  console.log(ctx.request.body);   // {}
  ctx.body = JSON.stringify(ctx.request.files); // 空
});

前台页面设置请求头 'Content-Type': 'multipart/form-data;' 正常发送数据,一切正常。
我现在想在node端不存储任何文件的话,通过调用服务端api将文件上传到服务器,但是ctx.request.files并没有任何的数据。 要是由其他的办法也可以分享一下

阅读 4.8k
1 个回答

如果是koabody的4的版本
const file = ctx.request.files.file; // 获取上传文件

如果是koabody的3的版本
const file = ctx.request.file; // 获取上传文件

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题