求助 koa2如何获取FormData
发布于 7 年前 作者 Sunshine168 14666 次浏览 来自 问答

RT 前端页面将一个base64放在FormData中提交


 function base64_uploading(base64Data){
      var data = new FormData();
     data.append('pic', base64Data);
        $.ajax({
        type: 'POST',
        url: "../api/upload",
         cache: false,
    data: data,
    processData: false,
    contentType: false,
        timeout: 50000,
        success: function(data){
        console.log(data);
        
        },
        complete:function() {
          $("#upload").prop('disabled',false)
        },
        error: function(xhr, type){
          alert('上传超时啦,再试试');
          
        }
   });
}

目前尝试 koa-bodyparser 不解析 application/x-www-form-urlencoded koa-body 报错 是我传输的方式有问题吗 有看到过https://cnodejs.org/topic/4f939c84407edba2143c12f7 帖子里 可以直接处理的话 应该post过去的base64内容大小应该是比较小的有看到评论中狼叔说用上传。。 但是get不到 ~ 怎么处理

11 回复

先码一下,下班答

会不会是body解析的问题 原先我上传东西也有问题 后来换的koa-better-body 使用在这里

@hezhongfeng 我用过一下koa-better-body 也报错了 不过我那没写options 我印象中有个options限制大小的 但是报错里面没有看出和这个有关 ~我去看看你怎么写的

老铁我下班了… 这个问题之前遇到过,FormData坑爹在于没办法通过ctx.req.body拿到 我当时试了很多方法,最后用了formidable才解决问题 Node代码


	const Koa = require("koa");
	const router = require("koa-router")();
	const formidable = require("formidable");
	const app = new Koa();
	app.use(router.routes());

	router.get("/index",(ctx)=>{
    	ctx.body = require("fs").readFileSync("./index.html","utf-8");
	})

	router.post('/base64', async (ctx, next) => {
    	var form = new formidable.IncomingForm();
    	form.parse(ctx.req,async function(err,fields,files){
        	if(err){throw err; return;}
        	console.log(fields);//{ name: base64字符串 }
    	});
    	ctx.body = "end"
	
	});

	app.listen(3000);

html

 	var base64Data =" eeMAIAAAAAAAAAAAAAAAAwC4tYlrOBhwFqQAJggg..........==";
        function base64_uploading() {
            var data = new FormData();
            data.append('name', base64Data);
            $.ajax({
                type: 'POST',
                url: "/base64",
                cache: false,
                data: data,
                processData: false,
                contentType: false,
                timeout: 50000,
                success: function(data){
                    console.log(data);
                },
                complete:function() {
                    //$("#upload").prop('disabled',false)
                },
                error: function(xhr, type){
                    alert('上传超时啦,再试试');

                }
            });
        }

https://github.com/Yuki-Minakami/Koa2-FormData 再贴个链接,这是上面的DEMO, 其他的项目要是能给个star就更好啦~(≧▽≦)/~

@Yuki-Minakami !已star 可以了 非常感谢啊

koa-body 用这个。 const koaBody = require(‘koa-body’); koaBody({multipart: true})

@jizhuofeng 谢谢 ! 我用楼上的办法解决了 我迟点对比一下这几个中间件的区别看看

回到顶部