【发布时间】:2018-06-14 13:36:34
【问题描述】:
我正在尝试在我的网站上创建一个上传元素。我想要做的是一个上传按钮,当用户从计算机中选择一个文件时,它会立即将它上传到服务器。
这是我的表格:
<form id="createAlert" name="createAlert" enctype="multipart/form-data" method="POST" action="createAlert.php">
<input name="title" type="text" class="input-medium" maxlength="36"></input>
<textarea name="content" rows="7" cols="90" class="input-short" style="font-family: arial; width: 80%; resize: none; height: 250px"></textarea>
<input name="push" type="checkbox"></input>
<input enctype="multipart/form-data" name="img" id="img" size="35" type="file"/>
<input class="submit-gray" type="submit" value="POST ALERT"/>
</form>
这是我的 Javascript 代码,它将文件作为 FormData 对象发送到上传页面 (upload.php):
$('#img').live('change', function() {
var formData = new FormData();
formData.append('file', $('#img')[0].files[0]);
$.ajax({
url : 'upload.php',
type : 'POST',
data : formData,
enctype: 'multipart/form-data',
success : function(data) {
console.log(data);
alert(data);
},
cache: false,
contentType: false,
processData: false
});
});
到目前为止,一切都很好 - 一切正常。问题在于接收FormData 的upload.php 文件。这是它的代码(它只是一个测试版本,它还没有上传文件):
<?php
print file_get_contents('php://input');
var_dump($_FILES);
var_dump($_POST);
问题是var_dump($_FILES);和var_dump($_POST)的输出是两个空数组,而在file_get_contents('php://input')我得到的是文件数据。
这是输出(我用上传文件的内容剪掉了部分......):
------WebKitFormBoundaryw4nmFcISqYuAWQOS
Content-Disposition: form-data; name="file"; filename="Sem Título-1.png"
Content-Type: image/png
//Here is the file I uploaded...
------WebKitFormBoundaryw4nmFcISqYuAWQOS--
array(0) {
}
array(0) {
}
我在这里阅读了几十个问题的答案以及我所遇到问题的许多解决方案,但没有一个能解决问题。
我做错了什么?为什么我只在 php://input 中收到文件,但没有使用 $_FILES?
谢谢!
【问题讨论】:
-
您使用的 jQuery 版本是多少?我问
live()已在很久 之前被弃用并删除 -
@RoryMcCrossan 现在我正在使用 jquery 1.3.2 这是一个旧系统,我刚刚升级它添加新功能,我可以更新它但我认为它不会导致这个问题……是吗?
-
这肯定不会有帮助。那个版本的 jQuery 已经过时了将近 10 年。
-
@RoryMcCrossan 天才!有效!我不敢相信是这样,我在这个愚蠢的事情上花了 5 个小时,哈哈。将其发布为答案;)
-
很高兴它对你有用。我将其添加为答案。
标签: php jquery ajax upload multipartform-data