jQuery Blueimp FileUpload 上的 DELETE 方法不允许使用 Codeigniter/PHP(405 错误)?

Posted

技术标签:

【中文标题】jQuery Blueimp FileUpload 上的 DELETE 方法不允许使用 Codeigniter/PHP(405 错误)?【英文标题】:DELETE method on jQuery Blueimp FileUpload not allowed using Codeigniter/PHP (405 error)? 【发布时间】:2012-08-05 22:23:52 【问题描述】:

我正在尝试使用这个非常好的jQuery Blueimp File Upload plugin 删除文件。

我把这个插件放在我的根目录下,上传和删除文件都没有问题。

但是,当我将此插件嵌入我的 codeigniter 应用程序时,我将不再删除由于 405 错误而上传的文件。我已将所有文件夹设置为 777,以确保这不是问题。

有什么想法吗?这是我的控制台日志:

【问题讨论】:

这不是文件系统权限问题 - 您的网络服务器不允许删除操作。 我正在使用 Apache。如果这是一个网络服务器问题,为什么它允许 DELETE outside 我的 codeigniter 应用程序而不是 inside 在某处检查 <limit> 指令。仅仅因为它在一个地方工作而不在另一个地方工作并不意味着太多 - apache 允许覆盖各种级别 - 每个虚拟主机,每个目录,每个 url,等等等等。 值得一试处理带有 CI 的替代 HTTP 动词:***.com/questions/5540781/… @MarcB 你能更具体地说明我应该在哪里寻找<limit> 指令吗?我对此并不熟悉。 【参考方案1】:

我按照这个 Blueimp 插件的one of the Codeigniter Forks 中的代码解决了我自己的问题。

问题在于 Blueimp 插件默认指定的 DELETE HTTP/AJAX 请求的 URL。这些 URL 对应于文件上传的目录路径。不幸的是,默认情况下,Codeigniter 通过使用 URL 来确定要调用的控制器/控制器方法来覆盖它。

例如,我上传文件的目录结构是这样的:

/uploads/img1.jpg

Codeigniter 查找了一个名为 uploads 的控制器和一个名为 img1.jpg 的方法,但这些显然不存在。

我通过更改分配给每个文件的 Blueimp 插件“upload.class.php”文件delete_url 解决了这个问题。 delete_url 已从目录位置更改为 codeigniter 控制器/控制器方法,如下所示:

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); 
     

【讨论】:

【参考方案2】:

你应该只修改这个文件UploadHandler.php:

函数 __construct($options = null, $initialize = true, $error_messages = null) // 如果您的服务器不支持,请将以下选项设置为 'POST' // 删除请求。这是发送给客户端的参数: //'delete_type' => 'DELETE', 'delete_type' => 'POST',

【讨论】:

这正是 MVC 中所需要的。非常感谢男人 它成功了,在 CakePHP 2.5.5 中,另一个 MVC!非常感谢!!【参考方案3】:

我通过以下方式解决了它:

在文件中: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'

只需添加指向您创建的上传文件方法的路由。

【讨论】:

【参考方案4】:

我将 jquery 文件上传添加到我的应用程序中的控制器。像马克一样,我无法删除文件。但我解决了这样的问题:

在构造函数中,options数组的第一个元素

'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/',

准备好了。试试看!

【讨论】:

【参考方案5】:

您需要做的就是更改“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 的方法名称” //“图片上传”方法看起来像这样

public function picturesupload()

        error_reporting(E_ALL | E_STRICT);
        $this->load->library('UploadHandler');


【讨论】:

以上是关于jQuery Blueimp FileUpload 上的 DELETE 方法不允许使用 Codeigniter/PHP(405 错误)?的主要内容,如果未能解决你的问题,请参考以下文章

jQuery Blueimp FileUpload 上的 DELETE 方法不允许使用 Codeigniter/PHP(405 错误)?

JQuery-File-Upload BlueImp文件上传EXIF方向旋转

在admui中怎样上传本地文件?

jquery文件上传进度条不准确

将 csrf 令牌传递给 blueimp 文件上传

blueimp/jQuery-File-Upload 与 Laravel 如何集成?