我有一个关于通过JQuery的帖子将二进制(base64
)数据发送到我的MVC项目中的操作的问题。 base64
数据是从HTML5画布检索的裁剪图像(通过JCrop完成裁剪)。它适用于非常小的图像 - 但是在较大的图像上,我的控制器操作的参数中没有任何内容。这是示例电话:
var temp = canv1.toDataURL("image/png");
var base64 = temp.replace('data:image/png;base64,', '');
var image = { cropped : base64 };
$.ajax({
type: "POST",
url: "/Image/Upload",
data: image,
processData: false,
success: function (e) {
alert('Cropped Image saved!');
},
failure: function (e) {
alert(e);
},
error: function (e) {
alert(e.d);
}
});
我的控制器设置为立即在动作中接收数据作为String
参数,但我不确定这是否完全正确,因为我正在处理二进制数据我猜...
现在我明白我的错误处理在那里有点冒险,但无论为什么更大的图像根本不会被传递,但更小的可以吗?而且,我读到如果你没有说processData: false
,那么数据会像查询字符串一样传入,因此受2048字符限制(不要引用我的数字,我知道它是一个小字符限制不能准确记住它是什么)。
无论如何,长话短说我想知道如何使用JQuery的post方法将base64
数据传递给我的控制器,如BSON(因为我读到BSON对于处理二进制数据更有效,因为JSON是意在处理字符串数据)。另外,我使用 MongoDB 作为后端,所以最好还是与BSON合作。
我已经读过一个好用的框架是 JSON.NET ,但我找不到有关将base64数据转换为BSON并通过JQuery的帖子传递的信息(至少这个是我想要发生的事情。)
我对我的问题的替代解决方案持开放态度,但建议使用文件上传控件并发布文件是不合适的,因为我正在处理来自画布的裁剪图像,并且它不存在在这种状态之外的图像(据我所知)。
请帮忙!如果我走错了轨道,那么正确的方向就会受到很大的欢迎。
(ps:也希望尽可能保持“异步”,以避免整页刷新。)