2012-01-24 7 views
0

ユーザーがファイルを部分的にアップロードして何らかの理由で終了した場合、同時アップロードを処理する最良の方法を知っていますか? (またはインターネットが死ぬ)。同時アップロードと打ち切りアップロード、codeigniterを扱う場合

ここに私のコントローラです:http://pastebin.com/wqnFAge6

とモデル:http://pastebin.com/0S5ai2re

アップロードコントローラのすべては、私はそれ一度に複数のファイルをアップロードしようとした場合を除いて今も働いている

  if($this->input->post('upload')) {    
        $uploaded_image_ids = $this->Site_model->do_upload(); 
        //$uploaded_image_id = $this->Site_model->get_last(); 

        $values = array(
        'image_id' => implode(",",$uploaded_image_ids), 
        'session_id' => $this->session->set_userdata('session_id') 
        ); 
        $this->session->set_userdata('edit', $values); 

        //show uploaded image 
        redirect(implode(",",$uploaded_image_ids) . '?links'); 

      } 

サムネイルを1つ生成するのをスキップすることもあります。アップロードが中断されても、アップロードされたファイルは/ images/<に残されます。完了しました。

これらの問題をどのように修正できますか?どうもありがとう。

+0

同時アップロードについてはわかりませんが、不完全なアップロードは、最初に一時フォルダ( '/ uploads')にアップロードし、そのディレクトリのファイルをX日または時間よりも古いものにワイプすることで処理できます。 – Oldskool

+0

ファイルが半分も処理されたらどうなりますか?たとえば、3つのリサイズされたバージョンのうち2つが完了し、データベースに追加されます。/すべてのものが完全であることを確認するにはどうすればよいですか? – user1166654

答えて

0

アップロードを壊すので、POST経由(  AJAX なし)伝統的な方法を、ファイルのアップロード中に、あなたのクライアントは、彼の接続を失う必要がある場合は、リクエストボディが終わりマーカーを持っていないので、あなたのコントローラが実行されることはありません。

については uploads;そのようなものはありません(おそらくAJAX を除く)。ユーザーが1つの形式で複数のファイルをアップロードすると、これらは連続して処理されます。 Here私はグーグルで複数のアップロードを処理することでわかりました。そこに非同期ファイルのアップロードの様々な異なった実装であると、私はそれらのすべてに精通していないよので

は、この答えは、それらの少なくとも1つのために無効になることがあります。


編集

PHPでそのレベルでの並行処理がないので、あなたのアプリケーションが要求ごとに起動され、アプリケーションの同じインスタンスから2つのリクエストは配信されません。しかし、あなたが1つのDBで作業していると仮定すると、アプリケーションの2つのインスタンスが同じリソースに同時にアクセスすることがあり、それを処理するのはDBエンジンの責任です。たとえば、トランザクションを使用しないでアプリケーションレベルに陥ることはありますが、DBを正しくCRUDする限り、アプリケーションは並行処理を明示的に処理する必要はありません。

あなたのコードについては、肯定/否定の答えを得るために徹底的に学ぶ時間はありませんが、アップロードされた各画像につき、あなたのDBにはエントリがあります対応するデータがDB内で更新される画像がある場合、複数のそのような要求を同時に処理することは問題ありません。

+0

さて、一度に50人がサイトにアップロードされたとしたら、新しいアップロードIDを見つけてそれにリダイレクトするために最後にアップロードしたIDを取得する方法はありますか? $ this-> last_uploaded [] = $ this-> get_last(); (ペーストビンを参照してください) – user1166654

+0

私は私の答えを編集しました。 – thwd

関連する問題