1

ユーザーが画像をアップロードできる PHP スクリプトがあります。このイメージは一時ディレクトリに保存され、ユーザーに返されます。その後、ユーザーは JavaScript インターフェイスを使用して画像をトリミングできます。(x1,y2)(x2,y2) は、画像のトリミングに使用されるスクリプトに送信されます。その後、別のプレビューやトリミングのためにユーザーに返されます。ユーザーが十分に満足したら、「保存」をクリックします。一時ファイルが元のファイルにコピーされ、一時ファイルが削除されます。これらはユーザーごとの画像ではなく、機器の画像です。組織内のすべてのユーザーが、機器のイメージを置き換えることができます。このアプローチは優れていますが、いくつかの問題があります。

1) ユーザーがプレビュー用の画像をアップロードした後、ブラウザ ウィンドウを閉じたとします。一時ファイルが残ります。これは問題になる可能性があります。確かにCRONでクリーンアップできますが、理論的には大量の一時ファイルを持つことができます(これは醜いです)。cron は、編集中にユーザーの一時ファイルを削除することもできます。

2) 番号 1 に対処するために、equip1.temp やequip1.jpg など、機器ごとに一時ファイルを常に持つことができます。すべてのアップロードはequip1.tempに保存され、すべてのコミットはequip1.jpgに転送されます。2 人のユーザーが同じ機器の写真を同時にアップロードしようとすると、混乱する可能性があります (ほとんどありません + 問題ではありませんが、それでも醜いです)。

3)いつでも画像をやり取りできます(ユーザーが画像を「アップロード」すると、 としてエコーバックされます<img src="base64....." />。結果の編集と元のbase64文字列が処理のためにPHPに送り返されます)。この解決策は一時ファイルの問題を緩和しますが、高解像度の画像をやり取りするのに数秒かかることに気付きました。

この状況にどのように対処しますか?

4

2 に答える 2

2

このような同様の問題がありました。私の記憶が正しければ (かなり時間が経ちました)、DB にテーブルを作成して、ファイル名とセッション キー/時間を格納することになりました。スクリプトがロードされるたびに、データベースにデッド セッションがあった場合、対応するセッションとイメージ/ファイルが削除されました。

それが良い解決策かどうかはわかりませんが、複数ユーザー アクセスの問題は解決しました。

于 2012-10-04T16:51:56.210 に答える
1

あなたが述べた理由により、#3はお勧めしません。

代わりにこれを行うことをお勧めします:

  1. ユーザーはランダムな一時的な名前でファイルをアップロードします。equip1.jpgとして保存されequip1_fc8293ae82f72cf7.jpgます。スクリプトが両方のファイル名をジャグリングすることを確認してください。2 人のユーザーが同じ機器をアップロードでき、最後にアップロードしたユーザーが勝者になりますが、途中で競合することはありません。
  2. クロッパーが一時画像を操作するたびに、「タッチ」して変更時間を更新する必要があります。
  3. ユーザーに編集を終了させ、最終的なイメージ名の代わりに一時ファイルを移動します。
  4. mtime が 1 時間ほど前の放棄された一時ファイルを削除する cron、またはアップローダー スクリプトのセクションを作成します。多くの一時ファイルが作成される可能性があるため、これは面倒だとお考えですが、多くの画像が破棄されると思いますか? ガベージ コレクションは、この問題に対する非常に標準的な方法です。
于 2012-10-04T16:52:03.883 に答える