2017-09-26 74 views
2

我需要將每個請求的多個文件從我的Android應用程序上傳到apache Web服務器。我在Windows 10電腦上使用XAMPP設置網絡服務器。將通過POST Http請求(okhttp 3.3.1)上傳的多個文件移動到另一個目錄

當我上傳單個文件時,一切都按預期工作。 但是,當發佈多個失敗時,它們出現在C:\ xampp \ tmp文件夾中,但不會移動。

這是$ _FILES數組看起來像

<?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, 
), 
); 

這是我想向他們

<?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); 
} 

?> 

移動腳本,我認爲這與的名稱做上傳的文件,但是當我嘗試設置每個文件的名稱uploaded_file,在$ _FILES數組類似

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

我對HTTP和PHP沒有真正的經驗,所以這可能是一個微不足道的問題,但即使有幾個不同版本的PHP腳本,我也無法弄清楚。任何幫助是極大的讚賞。

編輯:目標目錄C:\ xampp \ htdocs \ images存在,我調整了最大上傳和POST文件大小,但正如我所說的只有移動文件是問題。

回答

0

我找到了解決方案,我的問題,所以我會張貼在這裏,以防萬一任何人有類似的問題。 問題在於$ _FILES數組的結構。 從php手冊,這是$ _FILES數組通常在發送$ 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 
     ) 
) 

當使用okhttp庫構建多部分體時,我的$ _FILES數組看起來像我之前發佈的。

這裏是調整腳本來處理上傳:

<?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"; 
    } 
} 
?> 
相關問題