php - 将通过 POST Http 请求(okhttp 3.3.1)上传的多个文件移动到另一个目录

标签 php android post okhttp

我需要根据 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);
}

?>

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

最佳答案

我已经找到了解决我的问题的方法,所以我会把它贴在这里,以防有人遇到类似的问题。 问题在于 $_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";
    }   
}
?>

关于php - 将通过 POST Http 请求(okhttp 3.3.1)上传的多个文件移动到另一个目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46434855/

相关文章:

php - 将对象传递给ZF2中的partial() View 助手

php - 从一个表中选择结果,并为每一行选择另一个表中具有相同 id 的所有行

php - 用php编写单页日志工具

android - 已替换的 fragment 在背景中仍然可见

javascript - 在 Titanium 中发送 post httpclient 请求

r - 如何在 rvest 的 html_session 中使用 post

php - cs50 pset7 php查询函数where子句中的未知列

java - 实现 canvas.drawBitmap 方法时如何避免内存泄漏?

android - FFMPEG:覆盖video_audio不连接或合并android

java - 纯文本的 Spring Boot 内容 header