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 错误)?