【问题标题】:Move multiple files uploaded via POST Http request (okhttp 3.3.1) to another directory将通过 POST Http 请求(okhttp 3.3.1)上传的多个文件移动到另一个目录
【发布时间】:2018-03-08 04:09:28
【问题描述】:

我需要从我的 Android 应用程序将每个请求上传多个文件到 apache 网络服务器。我在 Windows 10 计算机上并使用 XAMPP 设置网络服务器。

当我上传单个文件时,一切都按预期工作。 但是当发布多个失败时,它们会出现在 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);
}

?>

我认为这与上传文件的名称有关,但是当我尝试将每个文件的名称设置为 upload_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 文件大小,但正如我所说,只有移动文件才是问题。

【问题讨论】:

    标签: php android post okhttp okhttp3


    【解决方案1】:

    我找到了解决问题的方法,所以我会在这里发布,以防有​​人遇到类似问题。 问题在于 $_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 库构建 multipartbody 时,我的 $_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";
        }   
    }
    ?>
    

    【讨论】:

      猜你喜欢
      • 2022-07-28
      • 1970-01-01
      • 1970-01-01
      • 2020-09-02
      • 1970-01-01
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多