Загрузка файла с jQuery AJAX и обработчиком (ashx) не работает

Я пытаюсь загрузить файл изображения с помощью jQuery AJAX и универсального обработчика. Но похоже, что файл неT передается обработчику. После отправкиcontext.Request.Files[0]; всегда ноль: - /

Что я делаю неправильно?

HTML:



    
    


JS:

$().ready(function ()
{
    $('#file').change(function () 
    {
        sendFile(this.files[0]);
    });
});

function sendFile(file) 
{
    $.ajax({
        type: 'post',
        url: 'FileUpload.ashx',
        data: file,
        success: function () {
            // do something
        },
        xhrFields:
        {
            onprogress: function (progress) 
            {
                // calculate upload progress
                var percentage = Math.floor((progress.total / progress.totalSize) * 100);

                // log upload progress to console
                console.log('progress', percentage);

                if (percentage === 100) {
                    console.log('DONE!');
                }
            }
        },
        processData: false,
        contentType: 'multipart/form-data'
    });
}

ASHX:

public void ProcessRequest (HttpContext context) 
{
    HttpPostedFile file = context.Request.Files[0];

    if (file.ContentLength > 0)
    {
        //do something
    }
}
 emd06 июн. 2013 г., 15:50
У вас есть ссылка JQuery где-то в вашем коде правильно?
 Ricky06 июн. 2013 г., 16:11
Да, у меня есть. вызывается обработчик, но файл не загружен: - /

Ответы на вопрос(2)

Решение Вопроса

Удалось заставить это работать :)

Вот'мой код ...

///create a new FormData object
var formData = new FormData(); //var formData = new FormData($('form')[0]);

///get the file and append it to the FormData object
formData.append('file', $('#file')[0].files[0]);

///AJAX request
$.ajax(
{
    ///server script to process data
    url: "fileupload.ashx", //web service
    type: 'POST',
    complete: function ()
    {
        //on complete event     
    },
    progress: function (evt)
    {
        //progress event    
    },
    ///Ajax events
    beforeSend: function (e) {
        //before event  
    },
    success: function (e) {
        //success event
    },
    error: function (e) {
        //errorHandler
    },
    ///Form data
    data: formData,
    ///Options to tell JQuery not to process data or worry about content-type
    cache: false,
    contentType: false,
    processData: false
});
///end AJAX request
 urbanlemur26 февр. 2014 г., 19:15
Спасибо за публикацию этого ... это сработало для меня
 Ricky27 февр. 2014 г., 17:30
вы'добро пожаловать @urbanlemur :)
 JakePlatford21 нояб. 2017 г., 10:47
Отлично, другойРешения "Я"мы нашли онлайн-убежищеКазалось, это работает для меня, но это сработало.

Когда я реализую такую вещь, я использую

var fd = new FormData();
fd.append(file.name,file);

И в вызове ajax отправьте.fd

 kobigurk06 июн. 2013 г., 16:29
возможно ошибка на стороне клиента. Если у вас есть живой пример, это было бы здорово. Если нет, и выИспользуя chrome / firefox, проверьте консоль отладчика и дайте мне знать, что вы там видите.
 Ricky06 июн. 2013 г., 16:17
после внесения этого изменения обработчик нет, в чем может быть проблема?
 kobigurk06 июн. 2013 г., 20:52
Я исправил свой ответ - я ошибочно пропустил первый аргумент, имя файла.
 Ricky06 июн. 2013 г., 17:34
в консоли я получаю следующую ошибку: я 'Uncaught SyntaxError: Not enough argumentsМы загрузили демо, чтобы вы могли попробовать:онлайн демо
 Ricky06 июн. 2013 г., 23:32
сейчас я'Я получаю эту ошибку:POST http://localhost:10081/FileUpload.ashx 500 (Internal Server Error) x.support.cors.e.crossDomain.send x.extend.ajax sendFile (anonymous function) x.event.dispatch y.handle
 kobigurk07 июн. 2013 г., 09:13
Теперь это'Ошибка на стороне сервера - не могли бы вы показать нам свои журналы? Если ваше исключение не былоt пойман, ошибка появится в журнале событий

Ваш ответ на вопрос