我正在尝试使用jQuery进行非常简单的文件上传,而无需下载第三方插件/脚本。
这是我的代码:
HTML
<form enctype="multipart/form-data" action="" method="POST" name="form">
<input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
<?php _e('Choose a file to upload') ?>: <input name="uploadedfile" class="uploadedFile" type="file" />
<input type="submit" class="button uploadImage" value="<?php _e('Upload File') ?>" />
</form>
PHP
<?php
require_once($_SERVER['DOCUMENT_ROOT'].'/wp-blog-header.php');
$uploaddir = WP_CONTENT_URL.'/uploads'.$_POST['current_path'];
$uploaddir = str_replace('/','\\', $uploaddir);
$uploadfile = $uploaddir .'\\'. basename($_FILES['uploadedfile']['name']);
echo $uploadfile;
?>
JS
//File upload
jQuery('.uploadImage').live('click',function() {
var current_path = jQuery('#currentPath span').html();
var new_dir = jQuery(this).find('span').html();
// Load new content in browser window
jQuery.ajax({
type: "POST",
url: "../wp-content/plugins/wp-filebrowser/uploader.php",
dataType: 'html',
data: {current_path: current_path, new_dir: new_dir},
success: function(data){
alert(data);
},
error: function(){
alert('Page load failed.');
}
});
});
问题是我无法获得有关$_FILES['uploadedfile']['name']
的信息。这是因为表格从未提交过吗?
答案 0 :(得分:4)
您无法通过ajax上传文件。当你这样做时:
data: {current_path: current_path, new_dir: new_dir},
您只是发送文件的位置,而不是实际文件。在没有页面刷新的情况下上传文件的唯一方法是使用flash / java / etc,或通过隐藏的iFrame提交表单。
我认为jQuery表单插件可以处理这个问题。 Here's another script会做到这一点。
答案 1 :(得分:1)
这是对的。您只是将文件路径作为请求参数传递,而不是将文件内容作为multipart / form数据请求体传递。它不会落在$_FILES
。另外,再想一想,如果网络服务器和webbrowser在物理上不同的机器上运行,那么单独通过这条路并不会起作用。
我建议查看jQuery Uploadify plugin,它会透明地为您处理使用Ajax上传文件的所有令人讨厌的细节。
答案 2 :(得分:0)
确保为:
指定正确的设置请参阅:
同时确保:
print_r($_FILES);
答案 3 :(得分:0)
我认为你需要使用jQuery插件。 Uploadify很好,但您需要:
* jQuery v1.2.x or greater
* SWFObject v2.2 or greater
* Flash Player v9.0.24 or greater
您可以获得所有信息。在uploadify上www.uploadify.com。
This会为您提供更多选择。