5

この非常に優れたjQuery Blueimp File Upload pluginを使用してファイルを削除しようとしています。

このプラグインをルート ディレクトリに配置したところ、問題なくファイルをアップロードおよび削除できました。

ただし、このプラグインを codeigniter アプリに埋め込むと、405 エラーのためにアップロードしたファイルを削除できなくなりました。777問題がないことを確認するために、すべてのフォルダーをに設定しました。

何かご意見は?ここに私のコンソールログがあります:

Console.log

4

5 に答える 5

4

この Blueimp プラグインの Codeigniter フォークの 1 つにあるコードに従って、私自身の問題を解決しました。

問題は、Blueimp プラグインがデフォルトで指定する DELETE HTTP/AJAX リクエストの URL でした。これらの URL は、ファイルがアップロードされるディレクトリ パスに対応します。残念ながら、デフォルトでは、Codeigniter は URL を使用してこれをオーバーライドし、呼び出す controller/controller_method を決定します。

たとえば、アップロードされたファイルのディレクトリ構造は次のとおりです。

/uploads/img1.jpg

Codeigniter は呼び出されたコントローラーと呼び出されuploadsたメソッドを探しましたimg1.jpgが、それらは明らかに存在しませんでした。

delete_url各ファイルに割り当てられるBlueimp プラグイン「upload.class.php」ファイルを変更することで、これを解決しました 。次のdelete_urlように、ディレクトリの場所から codeigniter controller/controller_method に変更されました。

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);*/
    //.....

そして、ここに私の関数がどのように見えるかがあります( Codeigniter Blueimp Forkupload/deleteFileのコードをほぼ逐語的にたどります):

    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

「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を使用しているため、管理パネル
の「categories」の「admin」はコンテキストの名前です
「category_manage」はモジュールの名前です
「picturesupload」はライブラリをロードしているメソッドの名前

ですたき火を使用して、「コントローラー名」/「UploadHandler libaray が呼び出されるメソッド名」に変更するだけです
//「picturesupload」メソッドは次のようになります

public function picturesupload(){

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

}
于 2019-06-17T22:01:47.810 に答える