2017-01-31 32 views
-1

HTTPステータス500 - java.io.FileNotFoundException: イメージを保存中にC:\ sam \ IMAGES(アクセスが拒否されました)ファイルのIMAGES.Iでファイルの許可を変更するようなものを試し、違うフォルダに保存しようとしました。奇妙なことは、私の画像が実際に上記のファイルに保存されているということです。そのエラーを示す??このエラーを解決する方法は?Tomcatはユーザーの所有者です。java.io.FileNotFoundException(アクセスが拒否されました)エラー?ファイルが保存されています

My Code: 
MySampleUpload.jsp 
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 
<form action="FileUploadServlet" method="post"enctype="multipart/form-data"> 
    <div class="btn btn-success btn-file"> 
    <i class="fa fa-cloud-upload"></i> 
      Browse 
    <input type="file" name="file" /> 
    </div> 
    <button type="submit" value="submit" name='submit'>submit</button>` 
    </form> 
</body> 
</html> 

FileUploadServlet.java 



import java.io.File; 
import java.io.IOException; 

import javax.imageio.stream.FileImageOutputStream; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.MultipartConfig; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.Part; 
import java.io.RandomAccessFile; 

/** 
* Servlet implementation class FileUploadServlet 
*/ 
@WebServlet("/FileUploadServlet") 
@MultipartConfig(fileSizeThreshold=1024*1024*10, // 10 MB 
maxFileSize=1024*1024*50,  // 50 MB 
maxRequestSize=1024*1024*100)  // 100 MB 
public class FileUploadServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    private static final String UPLOAD_DIR="IMAGES"; 
    public FileUploadServlet() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 


    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     response.getWriter().append("Served at: ").append(request.getContextPath()); 
    } 

    /** 
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     //gets absolute path of the web application 
     //String applicationPath=request.getServletContext().getRealPath(""); 
     //construct path of the directory to save the uploaded file 
     String UploadFilePath="C:/sam"+File.separator+UPLOAD_DIR; 
     //creates the file directory if it doesn't exist 
     File FileSaveDir=new File(UploadFilePath); 

    if(!FileSaveDir.exists()) 
     { 
      FileSaveDir.mkdirs(); 
     } 

     System.out.println("Upload file Diiirectory"+FileSaveDir.getAbsolutePath()); 
     String fileName=null; 
     //get all parts from request and write it to the file on the server 
     for(Part part:request.getParts()) 
     { 
      fileName=getFileName(part); 

      part.write(UploadFilePath + File.separator + fileName); 

     } 
     System.out.println("File Uploaded successfully"); 
     request.setAttribute("message",fileName+"file uploaded successfully"); 

     getServletContext().getRequestDispatcher("/response.jsp").forward(request, response); 
    } 
    private String getFileName(Part part) 
    { 
    String ContentDisp=part.getHeader("Content-Disposition"); 
    System.out.println("content-disposition-header"+ContentDisp); 
    String[] tokens = ContentDisp.split(";"); 
    for (String token : tokens) { 
     if (token.trim().startsWith("filename")) { 
      return token.substring(token.indexOf("=") + 2, token.length()-1); 

     } 
    } return ""; 
    }} 
+0

すべてのコードはありませんか? – Axel

+0

おそらくいくつかのコード行を追加し、正確にどこにエラーが表示されているのかを示すだけでなく、どのユーザーがtomcatで実行されているのか、ディレクトリのアクセス許可は何ですか? – JChrist

+0

デバッグを試しましたか? 1つのファイルをアップロードすると、リクエストには何個の部分がありますか?これらすべての部分に 'fileName'が含まれていますか? 'getFileName'が空の文字列を返すとどうなるでしょうか? – JChrist

答えて

1

パーツオブジェクトが2回反復され、ファイル名が取得され、2回目はヌルです。 このパーツを交換してください。

for (Part part : request.getParts()) { 
      fileName = getFileName(part); 
      if (fileName != null && !"".equals(fileName)) { 
       part.write(UploadFilePath + File.separator + fileName); 
      } 

     } 
+0

ありがとう、これを試します:) – Sam

+0

すっごくありがとう...それはうまくいった... :) @サンジェイパテル – Sam

+0

しかし、私はあなたが言ったこと。それは2回繰り返されています。私は初心者です。少し説明すれば分かりやすくなります。 – Sam

0

フォームコンポーネントとファイルコンポーネントが分離されている以下のコードも使用できます。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    try { 
     List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request); 
     for (FileItem item : items) { 
      if (item.isFormField()) { 
       // Process regular form field (input type="text|radio|checkbox|etc", select, etc). 
       String fieldname = item.getFieldName(); 
       String fieldvalue = item.getString(); 
       // ... (do your job here) 
      } else { 
       // Process form file field (input type="file"). 
       String fieldname = item.getFieldName(); 
       String filename = FilenameUtils.getName(item.getName()); 
       InputStream filecontent = item.getInputStream(); 
       // ... (do your job here) 
      } 
     } 
    } catch (FileUploadException e) { 
     throw new ServletException("Cannot parse multipart request.", e); 
    } 

    // ... 
} 
+0

ありがとうございました、今私はよく理解しています:) – Sam

関連する問題