Это действительно помогает понять, что вы делаете в коде, поэтому я попросил показать его. Я угадал , ваш код выглядит так:
var f = $("image").files[0];
var reader = new FileReader();
reader.readAsBinaryString(f);
var image = reader.result;
$.ajax({
url: theUrl,
type: 'POST',
data: { Image: image }
});
Теперь, когда вы говорите:
Я получаю вывод следующим образом:
GIF89a,úæÿÿÿ2c½3...
Is мой вывод [...] двоичные данные?
blockquote>Ну да, но вы можете прочитать его, так что это текст , Разница между двоичными и текстовыми данными немного запутанна, прочитайте этот , если вы хотите больше запутаться. Причиной вашей проблемы является кодирование, как объясняется в этой статье.
Это зависит от того, как вы выводите его на свою страницу, но браузер может или не может применять определенную кодировку к полученным данным (инспекция Fiddler может научить вас больше то, что отправляется по HTTP-проводу) и отображать его как более или менее читаемый текст.
Это не относится к вашей переменной
image
, хотя, которая содержит фактические двоичные данные изreadAsBinaryString()
приводит в виде «исходные двоичные данные [sic]» . О, небрежно напечатанный, кто заботится о том, что вы возвращаетесь. Надеюсь / надеюсь массив байтов. Теперь вам нужно отправить это на сервер. Предпочтительно загрузки файлов обрабатываются элементами, но иногда вам нужно делать что-то с помощью AJAX. Вы не можете действительно загружать реальные файлы через JavaScript, хотя, насколько я знаю, поддержка браузера кажется возрастающей.
Таким образом, вам нужно будет
POST
с содержимым файла в качестве одного из параметров размещенной формы. Чтобы это произошло успешно с двоичными данными, вам необходимо правильно закодировать его для отправки формы.Сначала убедитесь, что запрос сделан с
content-type
вapplication/x-www-form-urlencoded
. Вы можете проверить это в Fiddler или посоветоваться с руководством . Последний вообще не упоминает какую-либо кодировку, вы должны понять, что вне .Теперь вам нужно url-encode бинарные данные, чтобы опубликовать его. Эта функция возвращает входные байты, интерпретируемые как UTF-8, в виде строки с кодировкой URL, которая может быть безопасно размещена. Затем serveride, вы можете заменить
System.Text.Encoding.GetEncoding («ISO-8859-1»). GetBytes (_Context.Request [«Изображение»]);
С
System.Text.Encoding.UTF8 .GetBytes (_Context.Request ["Изображение"]);
blockquote>Но почему у вас есть содержимое файла в этой форме? Как , этот ответ упоминает, что
FileReader
также содержит методreadAsDataURL
, который позволяет вам использоватьreader.result
непосредственно как переменнуюPOST
.Итак, ваш код будет выглядеть следующим образом:
var f = $("image").files[0]; var reader = new FileReader(); reader.readAsDataURL(f); var image = reader.result; $.ajax({ url: theUrl, type: 'POST', data: { Image: image } });
Затем, на сервере, вам придется декодировать данные с базы 64:
byte[] imageBytes = System.Convert.FromBase64String(_Context.Request["Image"]);
Как это работает?