Javascript 通过JSON模型上传ASP.NET MVC 3文件
我的web应用程序通过发布JSON数据与服务器端(ASP.NET MVC 3)交互 指向某些URL(不使用html表单) 如何使用JSON将文件发布到服务器并将其绑定到Javascript 通过JSON模型上传ASP.NET MVC 3文件,javascript,json,asp.net-mvc-3,Javascript,Json,Asp.net Mvc 3,我的web应用程序通过发布JSON数据与服务器端(ASP.NET MVC 3)交互 指向某些URL(不使用html表单) 如何使用JSON将文件发布到服务器并将其绑定到HttpPostedFileBase,而不使用多部分表单 谢谢 这是可以做到的,但是你会遇到跨浏览器的问题,你可以在这里找到更多详细信息:或者只是谷歌“ajax文件上传”我已经做到了,但没有使用HttpPostedFileBase从MVC应用程序获取内容。我只是简单地使用了JSON 您只需使用FileReader.onload(在
HttpPostedFileBase
,而不使用多部分表单
谢谢 这是可以做到的,但是你会遇到跨浏览器的问题,你可以在这里找到更多详细信息:或者只是谷歌“ajax文件上传”我已经做到了,但没有使用
HttpPostedFileBase
从MVC应用程序获取内容。我只是简单地使用了JSON
您只需使用FileReader.onload
(在HTML5上)方法提取文件内容,并将其作为Base64字符串直接发布到MVC控制器。上传按钮是一个标签
var file = $('#upload-button')[0].files[0];
var reader = new FileReader();
reader.onload = (function (f) {
return function (e) {
if (e.target.readyState == FileReader.DONE) {
$.ajax("FileStore/SavePicture", {
data: { content: e.target.result, name: f.name },
type: "post",
contentType: "application/json"
});
}
};
})(file)
从那里,您可以使用Convert.FromBase64String
方法转换为字节[]
。这就是动作内容的样子
string base64String = content;
// Get the starting point of the actual content from the base64String.
int start = base64String.IndexOf(",") + 1;
int length = base64String.Length - start;
contentAsString = base64String.Substring(start, length);
byte[] dataAsBytes = Convert.FromBase64String(contentAsString);
可能还有其他方法。据我所知,您不能发布文件,除非您使用多部分表单。我可以将文件作为二进制字符串发布为模型属性之一…如何访问该文件?如何将文件转换为二进制文件?JavaScript没有本地文件访问权限。我正在使用HTML5文件API FileReader.IE是什么,70%的市场份额,如果IE不支持,有什么意义?@Liam一切都取决于项目,如果不正常提交,他也可以检查支持情况。是的,我这样做了,但还有另一个问题。事实上,我正在使用JavaScriptSerializer对JSON进行反序列化,base64字符串不会自动反序列化为HttpPostedFileBase属性。可能有任何属性可以应用于模型的HttpPostedFileBase属性,以便我可以自定义此特定属性的反序列化过程?是的,也不适合我。因此,我使用这种方法作为变通解决方案。