koa2 转发文件上传接口
我用koa2 做了一层接口代理层,现在遇到一个问题就是转发文件上传不成功。
我的预期是 网页 调用form请求上传文件到 koa层,koa层在把收到的内容 用axios请求Java的接口,把接受到的内容传给Java。
现在其他的接口都可以顺利转发 ,就是上传接口不行呢,请求朋友们帮助,感激不尽。
我使用了 koa-body 中间件;
app.use(koaBody({
multipart: true,
strict: false, //如果为true,不解析GET,HEAD,DELETE请求
formidable: {
maxFileSize: 200 * 1024 * 1024 // 设置上传文件大小最大限制,默认2M
}
}))
这是对应的方法
module.exports = async ctx => {
let {data, status} = await ctx.axios({
url: `/upload`,
method: 'post',
data: ctx.request.files
})
ctx.body = data
ctx.status = status
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
你的files不是文件内容,而是文件存在本地的一些信息
中间件就是起一个过渡作用,所以要注意传递的方式。参考代码如下:
2019.11.25更新
快一年过去了,前段时间发现之前写的答案好像还是有问题,这两天重新搜了下上传文件转发的问题,发现除了这里有答案其他地方都屈指可数,再来更新下最新解决方案吧,相信遇到这个问题的肯定不止我一个。
首先为了解决这个问题主要依赖三个库:
form-data
和koa2-formidable
以及axios
:koa2-formidable
: 目的是从koa的ctx中获取原始接口传过来的formData,之前使用koa-bodyparser
发现无法获取formData,使用如下,在入口js文件(我这里是app.js)注册此模块:form-data
: nodejs中没有formData对象,需要借助这个库来实现formData的组装;axios
:进行接口请求package.json中这三个模块的版本如下:
入口文件:
进行接口转发的地方代码如下:
今天我也遇到楼主一样的问题,贴下我的解决方案,如果前端请求参数和最终上传接口的参数一样的话可以直接使用
ctx.req.pipe
的方式传递前端传过来的参数,这样就不需要使用其他任何处理: