我需要根据 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/