2010-10-01 2 views
0

У меня есть веб-метод страницы, и мне нужно получить доступ к заголовкам и, в частности, к загруженным файлам. Это возможно? Может ли веб-метод получать файл?Получить HttpRequest с помощью веб-метода ASP.NET

Если нет, то что бы вы посоветовали загрузить файлы без отправки почты? Я использую библиотеку форм jQuery, которая поддерживает это (и я работал с Django), однако мне сложно найти ответы на вопрос о том, как это сделать с ASP.NET.

+0

Я не уверен, что понял вас .. вы хотите загрузить файл с клиента для веб-сервера с помощью ASP.NET? или? – mastak

+0

Да, я хочу загрузить файл из браузера на веб-сервер с помощью ajax или аналогичного метода страницы, предпочтительно используя подключаемый модуль jQuery Forms. –

ответ

0

Плагин jQuery Forms преобразует загрузку файла в постфакту iframe, а не пост ajax автоматически. (Это связано с тем, что XHR не включает файлы.) Поэтому вам просто нужно создать обычную страницу aspx для обработки ответа. Он может просто быть пустым, кроме обработчика события загрузки. Если вам нужен какой-либо ответ, вы можете вернуть его обратно в HTML, который можно прочитать из тела, которое передается обратно.

Например, создать загрузку файла, который, на смену называет это:

function doSubmit() { 
     var data = {}; 
     $("#"+formId).ajaxSubmit({success: gotResponse, data: data}); 
} 

Обратите внимание, что «ajaxSubmit» здесь является неправильным. В этом случае (при загрузке файла) это обычная почта, которая будет выглядеть как запрос ajax. Очевидно, formId является идентификатором формы, содержащей элемент управления загрузкой файлов.

и функция отклика, (например):

function gotResponse(data) { 
      /* Cut out the extraneous stuff */ 
    result = data.replace(/^.*<div id="infoDiv">/, '') 
         .replace(/<\/div>.*$/,''); 
      /* do something with result */ 

    } 

Создание страницы ASPX с DIV, как это:

В загрузке страницы для этой страницы выполните следующие действия:

protected void Page_Load(object sender, EventArgs e) 
    { 
     try 
     { 
      // Get the file and do whatever with it. 
      var file = Request.Files[0]; 
      // Put the info to send back as a result here 
      InfoDiv.InnerHtml = "{error: false}"; // Or whatever 
     } 
     catch(Exception e) 
     { 
      InfoDiv.InnerHtml = "{error: true}"; // Or whatever 
     } 
    } 

HTH

1

Один из известных способов - Input tag с типом файла. Вот часть из ASPX кода страницы:

<input type="button" value="upload" onmousemove="mousemove()" class="ClientButton" /> 
<input type="file" id="uploadfile" class="file" name="uploadfile" runat="server" 
    onpropertychange="uploaderChange()"> 
<asp:Button ID="Upload" runat="server" /> 
  • Кнопки Загрузить использует для подмены стилей для не Skinable входного файла тега.
  • Загрузить кнопку, используя для обратной связи файл на сервер.

Простой бизнес-логики на JavaScript, чтобы скрыть по умолчанию кнопку Input File и используйте наш:

var muploader = '<%=uploadfile.ClientID %>'; 

function mousemove() { 
    var file = document.getElementById(muploader); 
    file.style.left = event.x - 15; // argh.. hardcoded due to static button size 
    file.style.top = event.y - 35; 
} 

function uploaderChange() { 
    if (event.propertyName == "value") { 
     fileName = document.getElementById(muploader).value; // if you need file name on server - you should extract it here 
    } 
} 

и стили (я не предоставляют стили для кнопок - как и в любом случае лет будет использовать свои собственные):

input.file 
{ 
    position: absolute; 
    height: 20px; 
    width: 1px; 
    opacity: 0; 
    -moz-opacity: 0; 
    filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0); 
} 

И C# код (ASPX страница за кодом):

protected override void Upload_Click(object sender, EventArgs e) 
{ 
    BinaryReader reader = new BinaryReader(uploadfile.PostedFile.InputStream); 
    var ImageFileContent = reader.ReadBytes((int) uploadfile.PostedFile.InputStream.Length); 
    // ... 
} 

И как это выглядит в моем приложении:

alt text

Примечание: испытан под IE ТОЛЬКО. Может потребоваться исправить код CSS или javascript из-за других браузеров. Дайте мне знать plz.

ИЛИ

Here is yet one solution но не опробован мною.

Смежные вопросы