koa 上传文件

koa 上传文件,第1张

最开始用koa-multer,接口没问题回调执行了,但是文件没有传上去。

折腾了两天,发现注释掉 app.use(koabody()) 就可以上传了(这个问题不知道有没有人遇到过,可能是我写的有问题,如果知道是什么问题请给我留言),但是不用koa-body没办法接收post请求。

查了一下资料发现只用 koa-body 就可以完成需求, 并不需要其他中间件。

这种方法接口都不用写,你没看错,不用写接口,如果缓散前端不在意是否有返回数据的话

当然也可以写个接口,并不影响文件保存,可以同时进行其他 *** 作。

由于我在上传图片的url里带了一个id,要根据不同的id存到不同的文件夹下,所以如果用第一个方法需要在接口回调里读文件,然后复制到相应的文件夹下,再删除这个临时文纳哪谈件,非常麻烦,可以用这个方法直接存到相应的文件夹下

里边的files对象就是传上来的文件,是洞碰一个集合,可以多文件同时上传,接下来要把数据还原成文件写到磁盘:

在post函数中调用,把ctx直接传进来就可以了

这里是fs官方api: http://nodejs.cn/api/fs.html

文件上传是一个经常要用到的功能,这里对基于koa实现文件上传做一个总结。PS:在我的另外一篇博客讲到了图片上传的前端使用[点这里]( https://www.jianshu.com/p/78ea4f94a3d0 ),这里接着那篇博客往下讲野橘。

首罩春先要安装koa-body用于解析请求数据

然后就像这样:

经过路由处理进入到具体的路由处理方法中:

ok,这样就可以在你定义的路径下找到上传的文件,颂闷团本文中的路径是 filePath ,而 remotefilePath 的路径是文件服务的路径供外部访问资源所用。

大家有不懂活或者觉得需要补充更正的地方欢迎留言,3Q~

文件上传请求肯定是post请求,koa中处理post请求参数需要安装一个中间件

我们处理文件上传需要在 koaBody 的配置设置 multipart 为 true ,这样上传的文件也就是 formdata ,会被 koaBody 处理在 ctx.request.files 中,其他普通的参数通过 ctx.request.body 就可以拿到:

上传的文件会包含上面那个几个字段,其中 path 为临时路径,把他们返回,下面会把接口请求结果贴出来,看一下就知道各个字段的含义。

app中引入并使用:

引入 upload 路由:

这里桐简磨用了原生的ajax,返回的response是个json字符串

安装: npm install fs-extra --save

改一下我们的 upload 接口,upload.js:

然后我们重新上传一下文件

其实上面已经实现了图片上传并且保存到我们想要的位置,那咐丛怎么访问呢,前端怎么展示呢,这就需要处理静态资源了。

在app.js中:

这时候我们就可以直接通过图片的文件名访问图片了,我们上面上传的一张图片叫 girl.jpg ,这时候直接访问:

前端加个img标签展示图片:

前端上传后:

如果需要添加其他参数,就在 formdata 中再 append 其他参数

这时候把ctx.request.body返回给前端,看看是什么样的:

到这里局斗整个功能就实现了,欢迎大家指教哦。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12140696.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存