Как передать содержимое файла изображения из элемента управления загрузкой файла в веб-метод через javascript?

У меня проблема с использованием двоичного содержимого файла. Я хочу передать содержимое файла через веб-метод. Я получаю его из элемента управления загрузкой файлов на своей странице с помощью функции javascript getAsBinary (). Но ошибка появляется в веб-методе, когда я пытаюсь создать пример класса Image. Итак, у меня есть страница (.aspx) с контролем загрузки файлов и диспетчером сценариев. Есть три функции javascript:

// Get image from fileupload control and pass it in webmethod
function Get_image() {
    var file_uploader = document.getElementById(file_uploader_name);
    var file_content = file_uploader.files[0].getAsBinary();
    imupcon.Get_image(file_content, OnRequestComplete, OnError);
}
// Successful execution
function OnRequestComplete(result) {alert(result);}
//Error execution
function OnError() { alert("Error!");}

И у меня есть веб-сервис с веб-методом:

[WebMethod]
public string Get_image(string file_content, string file_name) 
{
 byte[] data = Encoding.Unicode.GetBytes(file_content);
 MemoryStream memStream = new MemoryStream();
 memStream.Write(data, 0, data.Length);

 //Error appears here
 System.Drawing.Image image = System.Drawing.Image.FromStream(memStream);

 memStream.Close();
 return "Hurray!";
}

Есть ли у кого-нибудь идеи, в чем причина? Как я могу передать содержимое файла в веб-метод? Спасибо.


person greatromul    schedule 30.11.2009    source источник
comment
я почти уверен, что вы не можете загрузить файл через javascript в целях безопасности ...   -  person Jason    schedule 30.11.2009
comment
Каково содержание ошибки?   -  person Gregoire    schedule 30.11.2009
comment
Недопустимый параметр для Image.FromStream.   -  person greatromul    schedule 02.12.2009


Ответы (1)


Вам не нужен Encoding.Unicode.GetBytes, если он уже в двоичном формате. Если вы вызвали files[0].getAsText("utf-8"), данные были бы в юникоде. Обратите внимание, что все эти методы теперь устарели, и вам следует использовать обнаружение функций и использование стандартный API FileReader, если он доступен.

person Eli Grey    schedule 30.11.2009
comment
Хороший. Так что же вместо этого сделает OP? r = new FileReader(); r.onloadend = /*...*/; r.readAsBinaryString(file_uploader.files[0].name)? - person Crescent Fresh; 30.11.2009
comment
Но действительно ли создать пример класса Image с использованием содержимого файла, который передается функцией js? - person greatromul; 01.12.2009
comment
Я едва понял ваш вопрос, и вы не дали мне много информации, поэтому я просто указал, что может вызывать любые проблемы, с которыми вы сталкиваетесь. - person Eli Grey; 01.12.2009
comment
Я хочу выбрать файл изображения с помощью загрузчика файлов, затем я хочу передать его содержимое в веб-метод и создать файл изображения на сервере в этом веб-методе. Но когда я пытаюсь создать пример класса Image или заполнить FIleStream двоичным содержимым выбранного файла, появляется ошибка, которая прерывает выполнение моего веб-метода. - person greatromul; 01.12.2009