私のウェブサイト上でユーザが動的にアップロードした画像のサムネイルを生成するサービスをコーディングしました。これは、それが動作する方法である:Java(Spring MVC)のリソースへのアクセスを同期する
取得サムネイル:
- 、要求されたサイズに元の画像のサイズを変更し、ハードドライブ上にキャッシュしない場合は、このサムネイルが
- 前に要求されているかどうかを確認
- 戻るハードドライブ上
をキャッシュされたサムネイルは別の画像をアップロードします。
- この画像がアップロードされているかどうかを確認してください(例:ユーザーが自分のプロフィールの写真を更新することができる、古いものを削除することができます)
- はい、古いイメージのすべてのサムネイル
- 保存/新しいアップロードされた画像を上書き
を削除する問題がオンの場合ユーザがサムネイルを要求しているとき。 2人のユーザーが全く同じ時間に同じサムネイルをリクエストしていて、以前にサイズ変更されていない場合はどうなりますか?どちらの要求でも、元の画像のサイズを変更し、ハードドライブに保存するようサーバーに指示します。 両方の要求が同時に同じファイルをハードドライブに書き込もうとします。、明らかなアクセスの問題が発生します。
Spring MVCでこの競合を回避するにはどうすればよいですか?ファイルの存在のため
@RequestMapping("/images/{width:\\d{1,10}}x{height:\\d{1,10}}/{subject:.+}.{ext:png|gif|jpg|PNG|GIF|JPG}")
public void thumbnail(HttpServletResponse response,
HttpServletRequest request,
@PathVariable("width") int width,
@PathVariable("height") int height,
@PathVariable("subject") String subject,
@PathVariable("ext") String ext) throws IOException
{
// ...
}
サービスコードを掲載できますか?シンプルな同期問題のように聞こえる? – MikePatel