大佬们,如何解决form.parse跟ctx.body的问题

发布于 2022-09-06 10:15:33 字数 659 浏览 16 评论 0

大佬们,目前我要实现的功能大体是一个图片上传功能。
而这么一个小功能对于一只菜鸡来说,太多难点了,望各位大佬指点

大体结构:
前端vue,后端koa
项目分为两个系统,为了确保一些资源能够一起用,所以有一个文件夹attachment是跟这两个系统的文件夹是同级的。

主要问题:
1.由于上传功能是用户提供的裁剪过的图片,所以是以base64+formData的方式传输到后台。然后用form.parse来获取到base64 并转为二进制,再用fs.writeFileSync写入文件。
遇到的问题是:
(1)form.parse是异步执行的。所以比fs.writeFileSync后执行,那么就会写入一个空的文件。加了async跟await也没有用。
(2)如果将fs.writeFileSync写到form.parse里的话。ctx.body又会直接执行(而我的ctx.body里放的是图片的路径已经保存成功与否的状态),不会等form.parse执行完毕,那么无法将路径啥的返回给前端。
(3)动态生成的图片路径,前后端应该如何写才能使图片正确加载。

图片描述

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦里的微风 2022-09-13 10:15:33

await对回调函数是没有用的。可以构造一个Promise
`await new Promise((resolve,reject)=>{
form.parse(ctx,req,function(err,fields,files){

//parse过程
//如果成功就resolve,失败就reject
})

});
`
async-await的作用是让回调函数写成同步的形式,也就是说它可以看做一堆的callback不过是写法比较好看。

梦中楼上月下 2022-09-13 10:15:33

直接ctx.body = result不就可以了为什么还要包一下,楼上已经给答案了,还有你那个写入函数也需要包一下,很明显你要看一下promise或者async/await怎么用

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文