2017-09-26 8 views
2

Je dois télécharger plusieurs fichiers par requête depuis mon application Android vers un serveur web Apache. Je suis sur un ordinateur Windows 10 et utilisé XAMPP pour configurer le serveur Web.Déplacez plusieurs fichiers téléchargés via la requête POST Http (okhttp 3.3.1) vers un autre répertoire

Lorsque je télécharge un seul fichier, tout fonctionne comme prévu. Mais lors de la publication de plusieurs échecs, ils apparaissent dans le dossier C: \ xampp \ tmp, mais ne sont pas déplacés.

Voici comment le tableau $ _FILES ressemble

<?php $_FILES = array (

'uploaded_file1' => 
    array (
    'name' => 'data1.csv', 
    'type' => 'text/csv', 
    'tmp_name' => 'C:\\xampp\\tmp\\phpA9A6.tmp', 
    'error' => 0, 
    'size' => 7991, 
), 
    'uploaded_file2' => 
    array (
    'name' => 'data2.csv', 
    'type' => 'text/csv', 
    'tmp_name' => 'C:\\xampp\\tmp\\phpA9A7.tmp', 
    'error' => 0, 
    'size' => 24906727, 
), 
    'uploaded_file3' => 
    array (
    'name' => 'data3.csv', 
    'type' => 'text/csv', 
    'tmp_name' => 'C:\\xampp\\tmp\\phpB244.tmp', 
    'error' => 0, 
    'size' => 12342379, 
), 
); 

Et voici le script que je suis en train de les déplacer avec

<?php 

$move = "images/"; 
foreach ($_FILES['uploaded_file']['tmp_name'] as $key => $value) 
{ 
    $tmp_name = $_FILES['uploaded_file']['tmp_name'][$key]; 
    $name = $move.basename($_FILES['uploaded_file']['name'][$key]); 
    move_uploaded_file($tmp_name, $name); 
} 

?> 

Je pense qu'il a à voir avec le nom du les fichiers téléchargés, mais lorsque je tente de définir le nom de chaque fichier à uploaded_file, le tableau $ _FILES ressemble à ce

<?php $_FILES = array (
    'uploaded_file' => 
    array (
    'name' => 'data3.csv', 
    'type' => 'text/csv', 
    'tmp_name' => 'C:\\xampp\\tmp\\phpEF74.tmp', 
    'error' => 0, 
    'size' => 12342379, 
), 
); 

Je ne suis pas vraiment expérimenté avec HTTP et PHP donc c'est probablement un problème trivial, mais même avec plusieurs versions différentes du script PHP, je ne peux pas comprendre cela. Toute aide est grandement appréciée.

EDIT: Le répertoire cible C: \ xampp \ htdocs \ images existe et j'ai ajusté la taille maximale du téléchargement et du fichier POST, mais comme je l'ai dit, seul le déplacement des fichiers est le problème.

Répondre

0

J'ai trouvé la solution à mon problème, donc je l'afficherai ici au cas où quelqu'un aurait un problème similaire. Le problème résidait dans la structure du tableau $ _FILES. À partir du manuel PHP, voici à quoi ressemble le tableau $ _FILES lors de l'envoi d'une requête $ POST.

Array 
(
    [name] => Array 
     (
      [0] => facepalm.jpg 
      [1] => 
     ) 

    [type] => Array 
     (
      [0] => image/jpeg 
      [1] => 
     ) 

    [tmp_name] => Array 
     (
      [0] => /tmp/phpn3FmFr 
      [1] => 
     ) 

    [error] => Array 
     (
      [0] => 0 
      [1] => 4 
     ) 

    [size] => Array 
     (
      [0] => 15476 
      [1] => 0 
     ) 
) 

Lors de la construction du multipartbody avec la bibliothèque okhttp, mon tableau $ _FILES ressemblait à ce que j'ai posté avant.

Voici le script ajusté pour gérer le téléchargement:

<?php 

$path = "images/"; 

foreach($_FILES as $file){ 
    $name=$file['name']; 

    $file_path = $path.basename($name); 

    if(move_uploaded_file($file['tmp_name'],$file_path)) { 
     echo "success"; 
    }else { 
     echo "error"; 
    } 
} 
?>