Загрузка файлов через jQuery, предоставляется объект FormData и имя файла отсутствует, запрос GET

Я использую скрипт jQuery для загрузки файлов на новую страницу. Это тоже как-то работает, но проблема в том, что он отправляет данные формы как object FormData,

Вот код:

$('#submit').click(function () {
   var formData = new FormData($(this).form);
   $.ajax({
       url: '/test/file_capture',
       //Ajax events
       beforeSend: function (e) { 
         alert('Are you sure you want to upload document.'); 
       },
       success: function (e) { 
         alert('Upload completed'); 
       },
       error: function (e) { 
         alert('error ' + e.message); 
       },
       // Form data
       data: formData,
       //Options to tell jQuery not to process data or worry about content-type.
       cache: false,
       contentType: false,
       processData: false
    });
    return false;
});

HTML часть выглядит так:

<form enctype="multipart/form-data">
  <input type="file" id="image" name="image" accept="Image/*" />
  <input type="submit" id="submit" name="" value="Upload" />
</form>

Но сгенерированная ссылка выглядит так:

HTTP:// локальный:4965/ тест /file_capture [объект%20FormData]&_=1386501633340

Который не имеет имени изображения или любой другой вещи, прикрепленной к нему. Что мне не хватает? Даже если ошибки нет, запрос выполнен, и отображается предупреждение "Загрузка завершена".

3 ответа

Вы должны только отправить файл - не полная форма

var fileInput = $('#image');
var file = fileInput.files[0];
var formData = new FormData();
formData.append('file', file);

РЕДАКТИРОВАТЬ

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>

<form enctype="multipart/form-data">
  <input type="file" id="image" name="image" accept="Image/*" />
  <input type="submit" id="submit" name="" value="Upload" />
</form>

<script>
$('#submit').click(function (event) {
    event.preventDefault()
   var file = $('#image').get(0).files[0];
   var formData = new FormData();
   formData.append('file', file);
   $.ajax({
       url: '/test/file_capture',
       //Ajax events
       beforeSend: function (e) {
         alert('Are you sure you want to upload document.');
       },
       success: function (e) {
         alert('Upload completed');
       },
       error: function (e) {
         alert('error ' + e.message);
       },
       // Form data
       data: formData,
       type: 'POST',
       //Options to tell jQuery not to process data or worry about content-type.
       cache: false,
       contentType: false,
       processData: false
    });
    return false;
});
</script>

Вам нужно явно получить файл.

var image = $('#image')[0].files[0];

А затем добавьте файл в formData:

formData.append( image );

Вот пример того, как я это делаю:

    var image = $('#image')[0].files[0];

    if( window.FormData ) {
        formdata = new FormData();
        formdata.append( 'image', image );
        formdata.append( 'action', 'save-image' );

        $.ajax({
            url: 'controller/handler',
            type: 'POST',
            data: formdata,
            processData: false,
            contentType: false,
            success: function( res ) {
                // Handle it.
            }
        });
    }
}

Файлы не могут быть загружены методом GET. Вам нужно использовать POST.

$.ajax({
   method: 'POST',
   url: '/test/file_capture',
   // ...

Кроме того, вам нужен HTML 5, чтобы иметь возможность загружать файлы (хотя Firefox может разрешить это с более ранним XHTML).

Сначала получите объект

First get the Object from HTML

 //HTML
 <input id = "file_name" type = "file" />

 //JS
 var formData = new FormData()
 var file_obj = document.getElementById("file_name")
 formData.append('file_name', file_obj.files[0]);
 $.ajax({
    url: url,
    type: 'POST',
    data: formData,
    success: function (data) {

    },
    cache: false,
    contentType: false,
    processData: false
})
Другие вопросы по тегам