【问题标题】:Uploaded file not saving in the directory (PHP AJAX) "Serious in Need"上传的文件未保存在目录中(PHP AJAX)“严重需要”
【发布时间】:2021-10-20 01:24:58
【问题描述】:

所以我尝试了这个简单的上传代码,但它对我来说不能正常工作。 由于 cFos Speed 显示文件上传过程正常,正在上传 150kb 的图片,但最后文件不在目录中。 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 不起作用... 那么你们有什么建议呢?

【问题讨论】:

  • 在 PHP 中设置一些适当的错误报告。然后脚本很可能会告诉你错误在哪里。
  • 实际上我做得很好,但除了 mkdir 之外什么也没有显示。 "mkdir(): Permission denied' 没有显示任何关于上传过程的信息...

标签: php html ajax


【解决方案1】:

您的文件输入没有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;
?>

【讨论】:

  • 感谢您的帮助,但不幸的是它也没有工作,我真的很困惑,为什么我对这么简单的代码有问题....
【解决方案2】:

答案是我应该使用 copy() 而不是 move_uploaded_file() 来完成。 我只需要一个带有 enctype="multipart/form-data" 的表单并使用 type="file" 输入,然后使用提交操作执行此操作:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    • 2014-11-10
    • 2014-03-11
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多