AJAX — Загрузка файла (HTML 5) и PHP

#php #javascript #ajax #html

#php #javascript #ajax #HTML

Вопрос:

Я чувствую себя совершенно не в своей тарелке, но я чувствую себя так близко..

Я пытаюсь загрузить файл с помощью AJAX. Я нашел это руководство http://blog.new-bamboo.co.uk/2010/7/30/html5-powered-ajax-file-uploads и, казалось, все шло довольно хорошо до самого конца. Кажется, я не могу получить доступ к файлу на PHP, т. Е. используя $ _FILES [«foo»][«name»]; и я не уверен, как загрузить, используя другие методы.

Я не стремлюсь к тому, чтобы код был идеальным, просто сохранял простоту, чтобы я мог понять, что происходит. Заранее спасибо 🙂

Вот мой серверный код:

HTML: заголовок страницы

 </head> 
<body>




  <form onsubmit='showUser(); return false;' enctype='multipart/form-data'>
    <input id='the-file' name='file' type='file' />
    <input type='submit'>
  </form>
  <br />


  <div id='txtHint'><b></b></div>

</body>
  

Javascript:

 function showUser(str)
{
var fileInput = document.getElementById('the-file');
var file = fileInput.files[0];
var foo = file.fileName;

if (str=="")
 {
 document.getElementById("txtHint").innerHTML="";
 return;
 } 
if (window.XMLHttpRequest)
  {// code for IE7 , Firefox, Chrome, Opera, Safari
 xmlhttp=new XMLHttpRequest();
 }
else
 {// code for IE6, IE5
 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
 }
 xmlhttp.onreadystatechange=function()
  {
 if (xmlhttp.readyState==4 amp;amp; xmlhttp.status==200)
  {
  document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
  }
 }
 xmlhttp.open("POST","new_film_pro.php",true);
 xmlhttp.setRequestHeader("Content-type", "multipart/form-data");
 xmlhttp.setRequestHeader("X-File-Type", file.type);
 xmlhttp.setRequestHeader("X-File-Name", foo);
 xmlhttp.send(file);
 }
  

PHP:

 <?php


$postdata = file_get_contents("php://input");

echo "Name: " . $_SERVER['HTTP_X_FILE_NAME'] . "<br />";

?>
  

Комментарии:

1. Вы пробовали использовать VAR_DUMP ($_FILES)?

2. извините, я не видел комментарий раньше — результат, который я получаю, — array (0) { }

Ответ №1:

Взгляните на http://aquantum-demo.appspot.com/file-upload

Написание простого JavaScript больше не является такой уж отличной идеей. Используя библиотеки, как показано на этой странице, вы можете создать гораздо более мощный способ загрузки файлов, который поддерживает несколько файлов, возобновляемые загрузки, индикатор выполнения и многие другие функции, которые вам действительно пришлось бы попотеть, чтобы реализовать самостоятельно, но которые предоставляют вашему пользователю лучший опыт.

Ответ №2:

Я не уверен. но в теге формы вы не указали метод

Ответ №3:

Вы можете использовать file_get_contents(‘php://input’) для получения содержимого файла.