Получить HttpRequest с помощью веб-метода ASP.NET - PullRequest
0 голосов
/ 02 октября 2010

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

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

Ответы [ 2 ]

1 голос
/ 02 октября 2010

Один из известных способов использования Входной тег с типом File.Вот часть кода страницы 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" />
  • Кнопка загрузки используется для переопределения стилей для тега входного файла без скинов.
  • Кнопка загрузки с помощью дляотправить обратно файл на сервер.

Простая бизнес-логика на javascript, чтобы скрыть кнопку Входного файла по умолчанию и использовать наши:

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-код из-за других браузеров.Дайте мне знать, плз.

ИЛИ

Вот еще одно решение , но не проверенное мной.

0 голосов
/ 02 октября 2010

Плагин 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
        }
    }

НТН

...