上传的文件未保存在目录 (PHP AJAX) "Serious in Need"



所以我尝试这个简单的上传代码,但它不适合我。正如cfo的速度显示,文件上传过程是OK的,150kb的pic正在上传,但最后文件不在目录中。mkdir也不会创建一个新文件夹。虽然我给了所有权限,如az RWX chmod和apache:apache chown完全到我正在工作的文件。下面是html和ajax的代码:

<input type="file" name="authform" id="authform" accept="image/png">

$(document).ready(function()
{
$("#authform").on("change", function()
{
var input = $(this);
var inputLength = input[0].files.length;
var file;
var formData = new FormData();
for (var i = 0; i < inputLength; i++)
{
file = input[0].files[i];
formData.append( 'authform[]', file);
};
$.ajax({
url: "file_upload.php",
type: "POST",
data: formData,
processData: false,
contentType: false,
});

对于file_upload.php:

<?php
if (!file_exists('uploads')) {
mkdir('uploads', 0777);
}
$filename = time()."_".$_FILES['file']['name'];
if ( 0 < $_FILES['file']['error'])  {
echo 'Error: ' . $_FILES['file']['error'] . '<br>';
}
else {
move_uploaded_file($_FILES['file']['tmp_name'], 'downloads/user-files/' . $filename);
}
echo 'downloads/user-files/'.$filename;
die;
?>

,是的!我使用了一个不同的目录,因为正如之前所说的mkdir不起作用…你们有什么建议?

您的文件输入没有multiple属性,因此不需要遍历它,因为它只与一个文件相关联。

$("#authform").on("change", function()
{
var formData = new FormData();
formData.append('authform', this.files[0]);
$.ajax({
url: "file_upload.php",
type: "POST",
data: formData,
processData: false,
contentType: false
});
});

在你的php代码中,你使用参数file来引用文件,但你在js.

中将其设置为authform
<?php
if (!file_exists('uploads')) {
mkdir('uploads', 0777);
}
$filename = time()."_".$_FILES['authform']['name'];
if ( 0 < $_FILES['file']['error'])  {
echo 'Error: ' . $_FILES['authform']['error'] . '<br>';
}
else {
move_uploaded_file($_FILES['authform']['tmp_name'], 'downloads/user-files/' . $filename);
}
echo 'downloads/user-files/'.$filename;
die;
?>

答案是我应该用copy()而不是move_uploaded_file()来做到这一点。我只需要一个表单与enctype="multipart/Form -data"输入type="file",然后使用submit动作执行如下操作:

copy($_FILES['authform']['tmp_name'], "/var/www/html/test/app/downloads/user-files/" . $_FILES['authform']['name']);

就是这样!像宝石一样工作!

最新更新