2017-07-27 6 views
0

spring MVCを使用した画像をsrc/main/webapp/resourcesにアップロードして、jspのimgタグ(<img src="<c:url value="/resources/images/image.jpg" />" alt="image" />)に表示しようとしています。 。私はこのコントローラを持っている:C:/absolute/path/to/webapp/resourcesまたは/absolute/path/to/webapp/resourcesSpring MVCでsrc/main/webapp/resourcesに画像をアップロードするには

@Controller 
public class FileUploadController implements ServletContextAware { 
    private ServletContext servletContext; 
    private String rootPath; 

    @RequestMapping(value = "/uploadSingleFile", method = RequestMethod.GET) 
    public ModelAndView uploadSingleFileFormDisplay() { 
     return new ModelAndView("uploadSingleFile"); 
    } 

    @RequestMapping(value = "/uploadSingleFile", method = RequestMethod.POST) 
    public @ResponseBody String uploadSingleFileHandler(@RequestParam("file") MultipartFile file) { 
     String filename = file.getOriginalFilename(); 

     rootPath = servletContext.getRealPath("/") + "resources/uploads"; 

     if (!file.isEmpty()) { 
      try { 
       Document document = new Document(); 
       Image image = new Image(); 
       byte[] bytes = file.getBytes(); 

       BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(new File(
        rootPath + "/" + filename 
       ))); 
       stream.write(bytes); 
       stream.close(); 

       return "You successfully uploaded " + filename + "!"; 
      } catch (Exception e) { 
       return "You failed to upload " + filename + " => " + e.getMessage(); 
      } 
     } else { 
      return "You failed to upload " + filename + " because the file was empty."; 
     } 

    } 
(...) 
} 

は、どのように私はこのような私のシステムの絶対パスを持っているrootPathを構築するのですか?

答えて

2

私はそれは良い考えではないと言います。実際にはsrcフォルダは存在しません。リソースはコンパイル時に移動されます。

さらに、Webルートの下にアップロードするのは良いことではありません。まず、Webルートを再起動すると、セキュリティ上の理由から、WARの新しい構造体で置き換えることができるからです。実行可能な場所に何かをアップロードする可能性のある穴ができます。

代わりにアップロードパスのプロパティを定義し、アップロードされたファイルを保存し、必要に応じてダウンロードするために使用します。

UPDATE:

@Value("${myUploadPath}") 
private String upload; 

と、例えば内のプロパティを指定しますapplication.propertiesまたは開始時のJVM引数として

-DmyUploadPath="C:/absolute/path/to" 
+0

アップロードパスプロパティの定義方法は? – simslay

+0

回答が更新されました – StanislavL

関連する問題