PHP文件上传,发送formdata对象

4
我希望上传一个文件,将其发送到JavaScript formData对象中,然后通过ajax发送到一些php脚本,该脚本将文件放入数据库中。当我在profile.php中上传文件,将其发送到JavaScript formData对象中,并将其发送回到profile.php时,它运行良好。问题是当我想要将formData对象发送到其他不是profile.php的php脚本时,它无法正常工作。
这是我的代码: profile.php
<form role="form" id="editUserProfile" method="post" action="" enctype="multipart/form-data">
    <input type="file" id="filename" name="filename" class="file-input" accept="image/*"/></a>
    <button type="submit">Save</button
</form>

javascript.js

    $('#editUserProfile').validate({
        submitHandler: function (form) {
            var aFormData = new FormData();

            aFormData.append("filename", $('#filename').get(0).files[0]);

            $.ajax({
                type: "POST",
                url: "script.php",
                data: aFormData,
                success: function(data){
                    window.location.reload(true);
                }
            })
        }
    });

然后我想在另一个php脚本(script.php)中检查文件是否已上传。

if(is_uploaded_file($_FILES['filename']['tmp_name']) && getimagesize($_FILES['filename']['tmp_name']) != false){
    $size = getimagesize($_FILES['filename']['tmp_name']);
    $type = $size['mime'];
    $imgfp = fopen($_FILES['filename']['tmp_name'], 'rb');
    $size = $size[3];
    $name = $_FILES['filename']['name'];
    $maxsize = 99999999;

    if($_FILES['userfile']['size'] < $maxsize ){
        $dbh = new PDO("mysql:host=localhost;dbname=test", 'root');
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        $stmt = $dbh->prepare("INSERT INTO table (image_type ,image, image_size, image_name) VALUES (? ,?, ?, ?)");

        $stmt->bindParam(1, $type);
        $stmt->bindParam(2, $imgfp, PDO::PARAM_LOB);
        $stmt->bindParam(3, $size);
        $stmt->bindParam(4, $name);

        $stmt->execute();
    }else{
        throw new Exception("File Size Error");
    }
}

很难准确地按照您想要的方式进行跟踪。您能否列出每个步骤,从AJAX提交开始? - charlietfl
好的。我有一个包含文件的aFormData对象,我想将其发送到script.php,然后检查是否成功接收了带有文件的对象。唯一的问题是进入if语句。我已经在表单所在的脚本中测试了这种情况,代码运行良好,但我想在其他地方拥有一个函数,这就是问题所在。 - Erik
“某个地方”非常模糊,请在问题中提供更具体的细节,说明您期望发生什么事情...在步骤中提到文件。您的描述过于宽泛,难以理解。 - charlietfl
我有两个PHP脚本:profile.php和upload.php。在profile.php中,我有一个表单,可以上传文件。在表单中上传文件后,我将此文件附加到JavaScript对象formdata中,就像我之前描述的那样(script.js)。当对象加载了文件数据后,我想通过ajax将其发送到upload.php。在upload.php中,我检查是否设置了if($_FILES),这对我来说非常重要。问题是,通过ajax将formdata对象发送到upload.php后,($_FILES)未设置。 - Erik
我也尝试将formdata对象发送回profile.php并执行了这部分代码(检查是否设置了$ _FILES并插入到数据库中),它起作用了。因此,问题仅在于将带有文件数据的对象发送到upload.php并检查是否设置了$ _FILES。 - Erik
1个回答

6

已添加到jQuery.ajax中,现在它可以工作了:

processData: false,

contentType: false,

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接