2016-08-10 20 views
0

私はJavaアプリケーションを開発しています。私がやりたいことは、画像をアップロードしてプロフィールで見る機能をユーザに与えることです。私は同様の質問が何度も何度も答えられていることは知っていますが、これは初めてのことです。本当にうまくいくように苦労しています。Jsp画像をwebapps ROOTフォルダから読み込みます

だからこれは私のテストコードです:

... 
<body> 
    <form method="post" action="FileUploader" encType="multipart/form-data"> 
     <input type="file" name="file" value="select images..."/> 
     <input type="submit" value="start upload"/> 
    </form> 
</body> 
... 

にUpload.jsp

FileUploader.java

あなたがここに見ることができるように、私はTomcatのwebapps/ROOT/filesに私のすべての画像を保存フォルダ。ここで

@WebServlet("/FileUploader") 
public class FileUploader extends HttpServlet { 

    private static final long serialVersionUID = 1L; 

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     PrintWriter out = response.getWriter(); 

     if(!ServletFileUpload.isMultipartContent(request)){ 
      out.println("Nothing to upload"); 
      return; 
     } 
     FileItemFactory itemfactory = new DiskFileItemFactory(); 
     ServletFileUpload upload = new ServletFileUpload(itemfactory); 
     try{ 
      List<FileItem> items = upload.parseRequest(new ServletRequestContext(request)); 
      for(FileItem item:items){ 

       String contentType = item.getContentType(); 
       if(!contentType.equals("image/png")){ 
        out.println("only png format image files supported"); 
        continue; 
       } 
       File uploadDir = new File("/home/agg/apache-tomcat/webapps/ROOT/files"); 
       File file = File.createTempFile("img",".png",uploadDir); 
       item.write(file); 

       out.println("Filename: " + file.getName()); 
       out.println("File Saved Successfully"); 

       response.sendRedirect("message.jsp"); 
      } 
     } 
     catch(FileUploadException e){ 
      out.println("upload fail"); 
     } 
     catch(Exception ex){ 
      out.println("can't save"); 
     } 
    } 
} 

message.jsp

、私は別のサーブレットを通じて保存されたイメージの1つをロードしようとしています。画像を取得

... 
<body> 
    <img src="file/img1.png"> 
</body> 

FileServlet.java

サーブレット。

@WebServlet("/file/*") 
public class FileServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    private static final int DEFAULT_BUFFER_SIZE = 10240; // 10KB. 
    private String filePath; 

    public void init() throws ServletException { 
     this.filePath = "/files"; 
    } 

    protected final void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     System.out.println("================In do get=================="); 

     // Get requested file by path info. 
     String requestedFile = request.getPathInfo(); 
     System.out.println("Requested File: " + requestedFile); 

     // Check if file is actually supplied to the request URI. 
     if (requestedFile == null) { 
      response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404. 
      return; 
     } 

     // Decode the file name (might contain spaces and on) and prepare file object. 
     File file = new File(filePath, URLDecoder.decode(requestedFile, "UTF-8")); 

     System.out.println("Filename: " + file.getName()); 
     System.out.println(file.getAbsolutePath()); 

     // Check if file actually exists in filesystem. 
     if (!file.exists()) { 
      System.out.println("DOES NOT EXIST"); 
      response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404. 
      return; 
     } 

    // more code here but it does not matter 
    } 
} 

問題は画像が読み込まれないことです。コンソールに表示されたパスが正しいようです。私はここで何が欠けていますか?私にとっては、あなたの問題は、次の理由のために正しいパスではないようで、ここで

<img src="file/img1.png"> 

答えて

0

されています:

  1. ルートディレクトリ/.../webapps/ROOT/filesあるので、それはfilesないで開始する必要がありますfile
  2. ファイルの名前はimg +ランダム長い+ .pngここであなたは1にランダムに長いを設定し、ルートWebアプリケーションであるため、あなたではなく、絶対に入れなければならない
  3. 正しいように見えるしないでなければなりませんパスをスラッシュで始める必要があります。
関連する問題