2017-09-26 72 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"; 
    } 
} 
?> 
相关问题