2017-01-02 17 views
0

ローカルMVCプロジェクトのイメージマネージャシステムで、ローカルイメージフォルダに保存されているすべてのイメージのギャラリーを表示し、イメージを削除したり、新しいイメージをアップロードしたりする基本機能を使用しています。Spring MVCリソースがリフレッシュされない

新しい画像がアップロードされると、ページは、追加されたばかりの画像を含む画像ギャラリーを再読み込みします。実際には、新しいイメージはHDに正しく保存されますが、Javaプロジェクトのresources/imgフォルダには自動的に表示されません。したがって、一旦ページが再ロードされると、新しいイメージはそこにありません。プロジェクトを手動で更新するときのみ、新しいイメージがresources/imgフォルダに表示されます。

奇妙なことに、私はdeleteメソッドと同じ問題はありません。イメージが削除されると、それはHDとresources/imgフォルダから消え、ページはイメージを表示せずにギャラリーをリロードしますただ削除されました。

問題の可能性はありますか?ここで

は私のコントローラである

@Controller 
public class imagesManagerController { 

// READ ALL FILES FROM IMG FOLDER 
@RequestMapping(value = "/imagesManager", method = RequestMethod.GET) 
public ModelAndView readImages 
(@RequestParam(value = "error", required = false) String error) { 

    // create model and link it to jsp imagesManager 
    ModelAndView model = new ModelAndView("imagesManager"); 

    // return content from images folder and add it to model 
    File imgsPath = new File("C:/Users/Alessandro/workspace/SpringMVCBlog/WebContent/resources/img"); 
    String[] imgsNames = imgsPath.list(); 
    model.addObject("imgsNames", imgsNames); 

    //if upload fails, display error message 
    if (error != null) { 
     model.addObject("error", 
       "Please select a file to upload"); 
    } 

    return model; 
} 




//UPLOAD FILE TO HD 
@RequestMapping(value = "/imagesManager/upload", method = RequestMethod.POST) 
public String handleFileUpload (@RequestParam("file") MultipartFile file) { 

    //get img name 
    String imgName = file.getOriginalFilename(); 
    System.out.println(imgName); 

    //create file path 
    String folder = "C:/Users/Alessandro/workspace/SpringMVCBlog/WebContent/resources/img/"; 
    File path = new File (folder+imgName); 
    System.out.println(path); 

    if (!file.isEmpty()) { 

     try { 
      //get bytes array from file 
      byte[] bytes = file.getBytes(); 

      //create output stream 
      BufferedOutputStream stream = new BufferedOutputStream(
        new FileOutputStream(path)); 

      //write img content on path 
      stream.write(bytes); 

      //close stream 
      stream.close(); 

      //if upload is successful, reload page 
      return "redirect:/imagesManager"; 

     } catch (Exception e) { 
      return "You failed to upload " + imgName + " => " + e.getMessage(); 
     } 

    } else { 
     return "redirect:/imagesManager?error"; 
    } 
} 


// DELETE FILE FROM HD 
@RequestMapping(value = "/imagesManager/delete", method = RequestMethod.POST) 
public String deleteFile(@RequestParam (value="imgName") String imgName) { 

    //create file path to be deleted 
    String folder = "C:/Users/Alessandro/workspace/SpringMVCBlog/WebContent/resources/img/"; 
    File path = new File (folder+imgName); 

    // delete file 
    if (path.delete()) { 
     //if delete is successful, reload page 
     return "redirect:/imagesManager"; 

    } else { 
     return "Delete operation failed"; 
    } 
} 

}

答えて

1

問題がパスにあります。

WebContent/resources/img 

それはおそらくIDEサーバーの自動デプロイメントのためにさわやかです。 %TEMP%パスでテストして確認してください。

1)アップロードしたファイルをアプリケーションサーバーのファイルシステムに保存しないでください。

2)アップロードされたファイルは、展開の一部であるため、アプリケーションフォルダには保存しないでください。一度だけ展開され、そのフォルダはアプリケーションファイル用です。

代わりに、クラウドまたは専用のファイルシステムを使用してください。

+0

アップロードしたファイルをローカルディスクに保存します。つまり、C:\ Users \ Public \ PicturesなどのIDEプロジェクトフォルダに保存しないでください。 –

+0

修正。運用環境では、クラウドまたは専用のファイルサーバーを使用する必要があります。 –

+0

OKですが、IDEプロジェクトフォルダにファイルを保存しないと、コントローラでどのように読み込むことができますか?私はローカルディスクにファイルをjpgとして保存したいのですが、DBや外部サーバー/クラウドには保存しないでください。 –

関連する問題