2016-04-22 5 views
1

У меня есть Аякс FormDataКак я могу прочитать файл FormData в php?

<form id="form" action="index.php?id=upload" method="post" enctype="multipart/form-data"> 

    <input id="files" multiple="true" name="files[]" type="file" /> 

</form> 

Я хочу отправить эту форму через DataForm вательно.

Так создать цикл JN JQuery для чтения каждого файла, поэтому для каждого файла у меня есть это:

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

     $.ajax({ 
      url: 'index.php?id=upload', 
      type: 'POST', 
      contentType: false, 
      cache: false, 
      processData:false, 
      data: data, 
      fileName:'files', 

в PHP коде, когда я печатаю var_dumb($_FILES) я получаю этот результат:

names:"array(1) { ["8_modem_pool_with_small_and_big_jpg"]=> array(5) { ["name"]=> string(35) "8 modem pool with small and big.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(24) "F:\xampp\tmp\php268B.tmp\"
["error"]=> int(0) ["size"]=> int(99790) }}

как могу ли я получить значение $_FILES на стороне сервера? Стараюсь

if(isset($_FILES["files"])) 
     { 

и

if(isset($_FILES["file"])) 
     { 

, но ни один из них не работает.

------- EDIT -------------

спасибо за ответы. но это не мой ответ.

в PHP, когда я использую

$_FILES["files"] 

ПОЛУЧИТЬ эту ошибку:

Undefined index

Но я могу напечатать значения этого кода:

foreach($_FILES as $index => $file) { 
move_uploaded_file($file['tmp_name'],$target.$file['name']); 
} 

Я надеюсь, что вы underestand меня .. ..

Я хочу somet hing вот так:

if(isset($_FILES["files"])) 
{ 
    //do action for single file 
    // do action for array file 
} 

Последний код работает для нормальной формы, но не работает для formdata.

+0

http: // stackoverflow.com/questions/35086065/ajax-multiple-file-upload-with-php – user5200704

ответ

1

Вы можете попробовать петлю через этот ассоциативный массив 3 уровня с for петля:

if(isset($_FILES['8_modem_pool_with_small_and_big_jpg'])){ 
    for($i=0;$i < count($_FILES['8_modem_pool_with_small_and_big_jpg']['name']);$i++){ 
     //Do whatever with the file: 
     echo $_FILES['8_modem_pool_with_small_and_big_jpg']['name'][$i]; 
     echo $_FILES['8_modem_pool_with_small_and_big_jpg']['type'][$i]; 
     echo $_FILES['8_modem_pool_with_small_and_big_jpg']['tmp_name'][$i]; 
    } 
} 
+0

моя проблема: '$ _FILES ['files']' ... it return 'Undefined index' error – elize

+0

@elize вы пытались '$ _FILES [ '8_modem_pool_with_small_and_big_jpg'] '? – user3284463

+0

спасибо. ваш комментарий - мой ответ. для пользовательского имени я делаю это и работает сейчас. 'data.append ('файлы', файл);' – elize

0

попробуйте следующее:

move_uploaded_file($_FILES['names']['8_modem_pool_with_small_and_big_jpg']['tmp_name'], $target);//target is the new file location and name 

для нескольких файлов используйте цикл

foreach($_FILES['names'] as $index => $file) { 
    $target = '/img/'.$file['name'] 
    move_uploaded_file($file['tmp_name'], $target); 
} 
0

Это зависит от того, какие ценности вы хотите. Все они видны в массиве.

Если вы хотите, чтобы имя, которое вы можете использовать

$_FILES['names']['8_modem_pool_with_small_and_big_jpg']['tmp_name'] 

Чтобы сохранить файл в определенном месте вы можете использовать

move_uploaded_file($_FILES['names']['8_modem_pool_with_small_and_big_jpg']['tmp_name'], $myFile); 
Смежные вопросы