2013-08-20 4 views
1

У меня есть следующий вид:Ajax загрузка файлов

<form method="post" enctype="multipart/form-data" id="upload" action="upload.php"> 
<input type="file" id="file" name="file" size="10"/> 
<input id="uploadbutton" type="button" value="Upload"/> 
</form> 

Следующая Javascript:

$(document).ready(function() { 
    $("#uploadbutton").click(function() { 
     var filename = $("#file").val(); 

     $.ajax({ 
      type: "POST", 
      url: "upload.php", 
      enctype: 'multipart/form-data', 
      data: { 
       file: filename 
      }, 
      success: function (text) { 
       alert("Data Uploaded: " + text); 
      } 
     }); 
    }); 
}); 

и следующий PHP (в качестве теста)

echo json_encode($_POST); //uses post to check as $_FILES returns nothing 

предупреждение будет сообщите мне ответную строку "file: test.jpg", как вы можете видеть, хотя это имя файла, а не собственно файл. Как я могу преобразовать свой файл, чтобы получить фактический файл, а не имя файла.

Заранее спасибо.

+1

вы просто не можете сделать это таким образом. вам вместо этого нужно создать объект FormData и отправить его как данные, а 'processData' -' false'. Обратите внимание: поскольку некоторые браузеры не поддерживают объект FormData, эти браузеры не могут загружать файлы через ajax. –

+0

Является ли это, когда совместимость начинает становиться проблемой? –

+1

есть. Для полностью кросс-браузерного решения (или в качестве резервного для браузеров, которые не поддерживают formData) вы можете отправить свою форму в скрытый iframe. –

ответ

0

Синтаксис, который вы используете, неверен для загрузки файлов с помощью ajax, вам необходимо передать объект FormData в качестве данных запроса и использовать processData: false. Однако некоторые браузеры не поддерживают FormData, поэтому вам придется отказаться от публикации на скрытый iframe в этих браузерах.

1

Вы по-прежнему можете использовать метод «PUT» вместо метода «POST», он будет работать для всех браузеров, кроме старых.

См: Topic

+0

Отсутствие поддержки - единственная причина, мешающая мне спуститься по этому маршруту, но спасибо за ваш вклад. –

+0

Нет проблем, я был там в последнее время :) – user2462805