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对象的主要内容,如果未能解决你的问题,请参考以下文章