PHP文件上传,发送formdata对象

Posted

技术标签:

【中文标题】PHP文件上传,发送formdata对象【英文标题】:PHP file upload, sending formdata object 【发布时间】:2013-11-10 11:40:32 【问题描述】:

我想上传一个文件,将其发送到 javascript formData 对象,然后通过 ajax 发送到一些 php 脚本,该脚本会将文件放入数据库。当我在配置文件 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 提交开始的每个步骤吗? 好的。我有一个带有文件的 aFormData 对象,我希望它发送到 script.php,在那里我将检查带有文件的对象是否成功接收。唯一的问题是进入 if 语句。我用表单所在的脚本测试了这个案例,代码运行良好,但我想在其他地方有一个函数,这就是问题所在。 somewhere else 非常模糊...请更新问题,详细说明您期望发生的事情...逐步提及文件。您的描述过于松散,无法理解 我有 2 个 php 脚本:profile.php 和 upload.php。在 profile.php 中,我有一个上传文件的表单。在表单中上传文件后,我将此文件附加到 javascript 对象表单数据中,就像我之前描述的(script.js)一样。当对象加载了文件数据时,我想通过 ajax 将其发送到 upload.php。在upload.php 中,我正在检查是否设置了($_FILES),这对我来说很重要。问题是通过ajax发送formdata对象到upload.php后没有设置($_FILES)。 我还尝试将 formdata 对象发送回 profile.php 并执行这部分代码(检查是否设置了($_FILES)并插入到数据库中)并且它工作。所以问题只是将带有文件数据的对象发送到upload.php并检查是否设置了($_FILES)。 【参考方案1】:

添加到 jQuery.ajax 并且现在可以使用:

processData: false,

contentType: false,

【讨论】:

以上是关于PHP文件上传,发送formdata对象的主要内容,如果未能解决你的问题,请参考以下文章

通过jQuery Ajax使用FormData对象上传文件

通过jQuery Ajax使用FormData对象上传文件

通过jQuery Ajax使用FormData对象上传文件

FormData 对象上传二进制文件

js 上传文件模拟Form 表单

15. 利用ajax jquery 上传文件