我的 Web 应用程序通过将 JSON 数据发布到某些 URL(不使用 html 表单)与服务器端(ASP.NET MVC 3)进行交互。
如何将文件发布到服务器并将其绑定到HttpPostedFileBase使用 JSON 而不使用多部分表单?
谢谢!
我的 Web 应用程序通过将 JSON 数据发布到某些 URL(不使用 html 表单)与服务器端(ASP.NET MVC 3)进行交互。
如何将文件发布到服务器并将其绑定到HttpPostedFileBase使用 JSON 而不使用多部分表单?
谢谢!
我已经这样做了,但没有使用HttpPostedFileBase从 MVC 应用程序获取内容。我只是使用 JSON。
您可以简单地使用FileReader.onload(在 HTML5 上)方法来提取文件内容并作为 Base64 字符串直接发布到 MVC 控制器。是#upload-button一个<input type=file ...>标签。
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方法转换为byte[]. 这就是 Action 内容的样子;
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);
可能还有其他一些方法可以做到这一点。
可以,但是你会遇到跨浏览器的问题,更多细节可以在这里找到:如何使用 jQuery 异步上传文件?或者只是谷歌“ajax文件上传”