5

我正在尝试使用这个非常好的jQuery Blueimp 文件上传插件来删除文件。

我将此插件放在我的根目录中,并且能够上传和删除文件没有问题。

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

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

控制台日志

4

5 回答 5

4

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

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

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

/uploads/img1.jpg

并且 Codeigniter 寻找一个被调用的控制器uploads和一个被调用的方法,img1.jpg但这些显然不存在。

我通过更改 delete_url分配给每个文件的 Blueimp 插件“upload.class.php”文件解决了这个问题。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函数的样子(再次按照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); 
     }
}
于 2012-08-08T22:50:24.890 回答
3

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

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

于 2014-12-05T17:20:09.737 回答
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'

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

于 2018-01-31T15:17:33.560 回答
0

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

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

'script_url' => $this->get_full_url().this->basename($this->get_server_var('SCRIPT_NAME')),

删除对 SCRIPT_FILENAME 的引用

删除对 SCRIPT_FILENAME 的引用并添加加载uploadhandler.php库的驱动程序的名称。就我而言,文件上传

'script_url' => $this->get_full_url().'/fileupload/',

准备好。你试一试!

于 2018-04-30T10:50:10.900 回答
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”
“categories”是上下文的名称
“category_manage”是模块的名称
“picturesupload”是我加载库的方法的名称

如果你不是使用 bonfire 然后只需将其更改为“您的控制器名称”/“您调用 UploadHandler libaray 的方法名称”
//“图片上传”方法如下所示

public function picturesupload(){

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

}
于 2019-06-17T22:01:47.810 回答