//var ext = ".txt"//上传后生成文件的后缀,一般和上传的文件后缀一致
//var ph = path.join('public/upload', Date.parse(new Date()).toString() + ext)//生成新的上传文件路径全称
////console.log(ph)
//var stream = fs.createWriteStream(ph)//创建一个可写流
//fs.createReadStream(tmpath).pipe(stream)//可读流通过管道写入可写流
最开始用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~
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)