我将此插件放在我的根目录中,可以轻松上传和删除文件。
但是,当我在我的CodeIgniter应用程序中嵌入此插件时,由于405错误,我无法删除已上传的文件。 我已将所有文件夹设置为
777
,以确保这不是问题。有什么想法吗? 这是我的控制台日志:
777
,以确保这不是问题。/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
函数的样子(再次遵循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);
}
}
你只需要修改 UploadHandler.php 文件:
function __construct($options = null, $initialize = true, $error_messages = null) {
// 如果你的服务器不支持 DELETE 请求,可以将以下选项设置为 'POST'。这是一个发送到客户端的参数:
//'delete_type' => 'DELETE',
'delete_type' => 'POST',
我用以下方法解决了这个问题:
在文件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'
'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/',
准备好了。试试看!
$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" 用于管理面板
"context" 是上下文的名称
"category_manage" 是模块的名称
"picturesupload" 是加载库的方法的名称
如果您没有使用Bonfire,则只需更改为“您的控制器名称” / “调用UploadHandler库的方法名称”
//"picturesupload" 方法看起来像这样
public function picturesupload(){
error_reporting(E_ALL | E_STRICT);
$this->load->library('UploadHandler');
}
<limit>
指令。仅仅因为它在一个地方有效而在另一个地方无效并不意味着太多——Apache允许在各种级别上进行覆盖——每个虚拟主机、每个目录、每个URL等等。 - Marc B