我正在创建自己的小CMS,需要上传文件和图片。我已经尝试过实现blueimp上传器,但无济于事。
我想通过jquery脚本将formData发送到我的CMS。在PHP代码(接收)中,我检查内容类型,然后想要将文件传递给函数(处理)。在控制台中,我可以看到jquery发送附件,但我在PHP中得到空的$ _POST和$ _FILES数组。
我无法使用GET请求,因为这些请求受我的CMS限制。
以下是我的代码片段:
HTML表单:
<form enctype="multipart/form-data">
<input type="file" name="import_file" id="import_file" />
<button id="import_send" value="import">Import</button>
</form>
jquery的:
$(document).ready(function(){
$('#import_send').on('click', function(e){
e.preventDefault();
var data = new FormData();
data.append($('#import_file')[0].files[0].name, $('#import_file')[0].files[0]);
$.ajax({
url: window.location.href,
data: data,
processData: false,
type: 'POST',
contentType: 'multipart/form-data',
mimeType: 'multipart/form-data',
success: function (ret) {
alert(ret);
}
});
});
});
PHP(接收):
<?php
function do_control(){
if ($_SERVER['CONTENT_TYPE']){
if (strpos($_SERVER['CONTENT_TYPE'], 'multipart/form-data') !== false){
$in = $_FILES;
$method = 'on_upload';
if ($bothandler->get_by_name('upload_bot', true) == true){
$bothandler->trigger($method, $in);
}
}
}
}
?>
PHP(处理):
<?php
public function on_upload($in){
if ($in['type'] == 'application/zip'){
if (!file_exists('../extension/'.$in['name'])){
move_uploaded_file($in['tmp_name'], '../extension/'.$in['name']);
}
}
if ($in['type'] == 'image/jpeg' || $in['type'] == 'image/png' || $in['type'] == 'image/bmp' || $in['type'] == 'image/gif'){
if (!file_exists('../images/'.$in['name'])){
move_uploaded_file($in['tmp_name'], '../images/'.$in['name']);
}
};
echo 'loaded';
}
?>
这是在请求标题中写的:
Accept */*
Accept-Encoding gzip, deflate
Accept-Language de,en-US;q=0.7,en;q=0.3
Cache-Control no-cache
Connection keep-alive
Content-Length 316648
Content-Type multipart/form-data
Cookie f23476c1b4331c112ea6010733733bd5=icg8d641nv2e79lm3ce7p39h06; 78fad9eff80cd47c7c23dc899cb72eea=b38c1atf7fbqk4jc29p3bej964; silent_admin_session=b38c1atf7fbqk4jc29p3bej964
DNT 1
Host www.abc.com
Pragma no-cache
Referer http://www.abc.com/index.php5
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0
X-Requested-With XMLHttpRequest
这是帖子中的内容
-----------------------------24138208746564 Content-Disposition: form-data; name="192184_10150119104647532_7869997_o.jpg"; filename="192184_10150119104647532_7869997_o.jpg" Content-Type: image/jpeg
***
PHP脚本抛出错误,因为它没有从$ _FILES获取任何数据,因为它是空的。 如果我尝试上传一个绝对不比允许的upload_max_filesize更大的图像或zip文件,这无关紧要。
作为一个额外的问题,我无法发送大于2M的文件。我已经尝试过包含
php_value upload_max_filesize 40M
php_value post_max_size 42M
在htaccess文件中然后我得到500错误。我还尝试使用user.ini文件
执行此操作upload_max_filesize=40M
post_max_size=42M
但它似乎没有效果。
答案 0 :(得分:0)
我开发了自己的文件上传系统,这是我的一段代码,可能对你有帮助
$('#inputFile').on('change', function(e) {
var $input = $(this);
var file = e.currentTarget.files[0];
var data = new FormData();
data.append('file', file);
$.ajax({
type: "POST",
data: data,
cache: false,
contentType: false,
processData: false,
url: 'path/to/php/script'
})
.done(function() {
alert('success');
});
});
答案 1 :(得分:0)
我的ajax电话略有变化。现在它有效。谢谢史蒂夫。
$。AJAX({ url:window.location.href, 数据:数据, cache:false, processData:false, 类型:'POST', contentType:false, 成功:功能(ret){ 警报(RET); } });