我想上傳文件到通用HttpHandler在C#中。使用HTML5 FileReader,c#和jquery上傳文件
$s("#dropArea")
.on("drop", function(e) {
e.preventDefault && e.preventDefault();
var file = e.originalEvent.dataTransfer.files[0];
var reader = new FileReader();
reader.onload = function(evt) {
$s.ajax({
url: MY_SERVER_URL,
type: "POST",
data: reader.result,
headers: {
"x-file-name": file.name
}
});
};
reader.readAsDataURL(file);
這似乎很好地工作,但是當張貼到ashx的頁面,我嘗試解碼像這樣的形象:當我嘗試
var form = context.Request.Form[0];
var attachment = form.Split(new[] {","}, StringSplitOptions.RemoveEmptyEntries)[1];
byte[] data = Convert.FromBase64String(attachment);
我使用拖放事件得到文件寫入byte[] data
到磁盤,結果文件不正確。我哪裏錯了?
編輯:我也嘗試過使用FormData,但Request.Form和Request.Files集合總是空的,我必須手動解析邊界。這是我用來做到的代碼:
var formData = new FormData();
formData.append(file.name, file);
$s.ajax({
url: MY_SERVER_URL,
type: "POST",
data: formData,
processData: false,
contentType: 'multipart/form-data',
mimeType: 'multipart/form-data',
headers: {
"x-file-name": file.name
});
發送文件,你爲什麼不這樣做正常人一樣,並使用'formData'對象要上傳的圖片的選項? – adeneo 2014-09-18 20:42:22
@adeneo,因爲當我這樣做時,Request.Form集合總是空的。我在jQuery中將內容類型設置爲「multipart/form-data」,它只是通過Request.InputStream來實現的,然後我需要解析出邊界。 – 2014-09-18 20:46:15
在第二個中,刪除標題並將contentType設置爲「false」,並查看它是否有效。 – adeneo 2014-09-18 20:50:27