我正在尝试使用这个非常好的jQuery Blueimp File Upload plugin删除文件。
我把这个插件放在我的根目录中,并且能够上传和删除文件没问题。
然而,当我在我的codeigniter应用程序中嵌入此插件时,由于405错误,我不再删除我上传的文件。我已将所有文件夹设置为777
,以确保这不是问题。
有什么想法?这是我的控制台日志:
答案 0 :(得分:4)
我按照Blueimp插件的one of the Codeigniter Forks中的代码解决了我自己的问题。
问题是Blueimp插件默认指定的DELETE HTTP / AJAX请求的URL。这些URL对应于文件上载位置的目录路径。遗憾的是,Codeigniter默认情况下会使用URL来确定要调用的控制器/ controller_method。
例如,我上传文件的目录结构如下:
/uploads/img1.jpg
和Codeigniter寻找一个名为uploads
的控制器和一个名为img1.jpg
的方法,但这些方法显然不存在。
我通过更改分配给每个文件的Blueimp插件“upload.class.php”文件delete_url
来解决这个问题。 delete_url
已从目录位置更改为codeigniter controller / controller_method,如下所示:
protected function set_file_delete_url($file) {
$file->delete_url = base_url().'upload/deleteFile/'.rawurlencode($file->name);
//"upload/deleteFile is my controller/controller_method
//$file->delete_url = $this->options['upload_url']
// .'?file='.rawurlencode($file->name);*/
//.....
然后这就是我的upload/deleteFile
函数的样子(再次按照the Codeigniter Blueimp Fork中几乎逐字的代码):
function deleteFile($file){
$fcpath=FCPATH.'uploads/;
$success =unlink($fcpath.$file); //PHP function was does the actual file deletion
//info to see if it is doing what it is supposed to
$info->sucess =$success;
$info->file =is_file(FCPATH .$file);
$info->fcpath = FCPATH;
if (IS_AJAX) {
//I don't think it matters if this is set but good for error checking in the console/firebug
echo json_encode(array($info));
}
else {
//here you will need to decide what you want to show for a successful delete
$file_data['delete_data'] = $file;
$this->load->view('admin/delete_success', $file_data);
}
}
答案 1 :(得分:3)
您应该只修改此文件UploadHandler.php:
function __construct($ options = null,$ initialize = true,$ error_messages = null){
//如果您的服务器不支持,请将以下选项设置为“POST”
//删除请求。这是发送给客户端的参数:
//'delete_type'=> '删除',
'delete_type'=> 'POST',强>
答案 2 :(得分:1)
我用以下方式解决了它:
在文件中:UploadHandler.php,在构造函数
中<强>之前:强>
$this->options = array(
'script_url' => $this->get_full_url().'/'.$this->basename($this->get_server_var('SCRIPT_NAME')),
添加到我的负载控制方法
$this->options = array(
'script_url' => $this->get_full_url().'/'.$this->basename($this->get_server_var('SCRIPT_NAME')).'/cargar'
只需添加指向您创建的方法的路线即可上传文件。
答案 3 :(得分:0)
我将jquery文件上传添加到我的应用程序中的控制器。像马克一样,我无法删除文件。但我解决了这个问题:
在构造函数中, options array
的第一个元素'script_url' => $this->get_full_url().this->basename($this->get_server_var('SCRIPT_NAME')),
删除对SCRIPT_FILENAME的引用
删除对SCRIPT_FILENAME的引用,并添加加载 uploadhandler.php 库的驱动程序的名称。就我而言, fileupload
'script_url' => $this->get_full_url().'/fileupload/',
就绪。试试吧!
答案 4 :(得分:0)
您需要做的就是更改“ UploadHandler”中的“ script_url”,并将其指向调用“ UploadHandler”库的位置。
//之前
$this->options = array(
'script_url'=>$this->get_full_url().'/'.$this->basename($this->get_server_var('SCRIPT_NAME')),
//后
$this->options = array(
'script_url'=>base_url().'admin/categories/category_manage/picturesupload'
因为我使用的是bonfire-CI,所以
管理面板的“ admin”
“类别”是上下文的名称
“ category_manage”是模块的名称
“ picturesupload”是我在其中加载库文件的方法的名称
如果您不使用bonfire,则只需将其更改为“您的控制器名称” /“您在其中调用UploadHandler libaray的方法名称”
//“ picturesupload”方法如下所示
public function picturesupload(){
error_reporting(E_ALL | E_STRICT);
$this->load->library('UploadHandler');
}