Как я могу использовать C # DLL в Powerbuilder?

Это действительно помогает понять, что вы делаете в коде, поэтому я попросил показать его. Я угадал , ваш код выглядит так:

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"]);

Как это работает?

0
задан Aaron Bertrand 29 August 2013 в 22:13
поделиться