我正在尝试使用这个非常好的jQuery Blueimp 文件上传插件来删除文件。
我将此插件放在我的根目录中,并且能够上传和删除文件没有问题。
但是,当我将此插件嵌入我的 codeigniter 应用程序时,我不再删除由于 405 错误而上传的文件。我已将所有文件夹设置为777
只是为了确保这不是问题。
有什么想法吗?这是我的控制台日志:
我正在尝试使用这个非常好的jQuery Blueimp 文件上传插件来删除文件。
我将此插件放在我的根目录中,并且能够上传和删除文件没有问题。
但是,当我将此插件嵌入我的 codeigniter 应用程序时,我不再删除由于 405 错误而上传的文件。我已将所有文件夹设置为777
只是为了确保这不是问题。
有什么想法吗?这是我的控制台日志:
我按照这个 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);
}
}
你应该只修改这个文件 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'
只需添加指向您创建的上传文件的方法的路由。
我将 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/',
准备好。你试一试!
您需要做的就是更改“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');
}