我的web應用程序通過將JSON數據 發佈到某些URL(不使用html表單)與服務器端(ASP.NET MVC 3)進行交互。通過JSON模型上傳ASP.NET MVC 3文件
如何將文件發佈到服務器並使用JSON將其綁定到HttpPostedFileBase
而不使用多部分表單?
謝謝!
我的web應用程序通過將JSON數據 發佈到某些URL(不使用html表單)與服務器端(ASP.NET MVC 3)進行交互。通過JSON模型上傳ASP.NET MVC 3文件
如何將文件發佈到服務器並使用JSON將其綁定到HttpPostedFileBase
而不使用多部分表單?
謝謝!
這是可以做到的,但你將有跨瀏覽器的問題,更多的細節,你可以在這裏找到:How can I upload files asynchronously with jQuery?或只是谷歌「AJAX文件上傳」
IE是什麼,70%的市場份額,如果IE不支持,有什麼意義? – Liam
@Liam一切都取決於項目,他也可以檢查支持,如果沒有正常提交。 – webdeveloper
我已經這樣做了,但沒有使用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
方法CONVER到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);
可能還有其他一些方法來做到這一點。
是的,我這樣做了,但還有另一個問題。實際上,我正在使用JavaScriptSerializer來反序列化JSON,並且base64字符串不會自動反序列化爲HttpPostedFileBase屬性。也許,有任何屬性可以應用於該模型的HttpPostedFileBase屬性,以便我可以自定義這個確定的反序列化過程屬性? – Dmitrii
是的,也沒有爲我工作。所以我使用這種方法作爲解決方案。 –
據我所知,你不能讓你發佈文件,除非你使用多部分表單。 – Liam
我可以將文件作爲二進制字符串發佈爲模型屬性之一... – Dmitrii
您如何訪問文件?你如何將文件轉換爲二進制文件? JavaScript沒有本地文件訪問權限。 – Liam