2016-05-28 10 views
-1

だから私はしたいのは、テキストとイメージを転送する単純なフォームです。今のところ、私は同時に両方をすることはできません!ここでmultipart/form-dataにテキスト入力を追加すると失敗する

は、単純なフォームコードです:

java.io.IOException: java.io.FileNotFoundException: C:\Users\poste hp\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp3\wtpwebapps\maroc_events\uploadFiles (Access denied) 

しかし、テキスト入力を片付けるとファイルのみ入力を許可すれば、それは動作します:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
pageEncoding="ISO-8859-1"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<!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>File Upload</title> 
</head> 
<body> 
<center> 
<h1>File Upload</h1> 
<form action="UploadServlet" method="post" enctype="multipart/form-data"> 
<input type="text" name="CaptionBox" /> 
<input type="file" name="photo" /> 
<input type="submit" /> 
</form> 
</center> 
</body> 
</html> 

このコード私は、このエラーを与えます!そして、私は理由を理解できません!

@WebServlet("/UploadServlet") 
@MultipartConfig 
public class UploadServlet extends HttpServlet{ 

/** 
* Name of the directory where uploaded files will be saved, relative to 
* the web application directory. 
*/ 
private static final String SAVE_DIR = "uploadFiles"; 

/** 
* handles file upload 
*/ 
protected void doPost(HttpServletRequest request, 
    HttpServletResponse response) throws ServletException, IOException { 
    EventUtil.addImage(request); 
    request.setAttribute("message", "Upload has been done successfully!"); 
    getServletContext().getRequestDispatcher("/message.jsp").forward(
      request, response); 
} 

}

そして最後にEventutilクラス:

package com.utils; 

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

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.Part; 

public class EventUtil { 

private static final String SAVE_DIR = "uploadFiles"; 

public static void addImage(HttpServletRequest request) throws IOException, ServletException{ 
    String appPath = request.getServletContext().getRealPath(""); 
    // constructs path of the directory to save uploaded file 
    String savePath = appPath + File.separator + SAVE_DIR; 
    System.out.println(savePath); 

    // creates the save directory if it does not exists 
    File fileSaveDir = new File(savePath); 
    if (!fileSaveDir.exists()) { 
     fileSaveDir.mkdir(); 
    } 

    for (Part part : request.getParts()) { 
     String fileName = extractFileName(part); 
     part.write(savePath + File.separator + fileName); 
    } 
} 

private static String extractFileName(Part part) { 
    String contentDisp = part.getHeader("content-disposition"); 
    String[] items = contentDisp.split(";"); 
    for (String s : items) { 
     if (s.trim().startsWith("filename")) { 
      return s.substring(s.indexOf("=") + 2, s.length()-1); 
     } 
    } 
    return ""; 
} 
} 

おかげでここ

は、サーブレットのコードです!

編集: のStackTrace:...\maro‌​c_events\uploadFilesディレクトリで、あなたがディレクトリに書き込むことはできませんので

java.io.FileNotFoundException: C:\Users\poste hp\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp3\wtpwebapps\maroc_events\uploadFiles (Accès refusé) 
java.io.FileOutputStream.open(Native Method) 
java.io.FileOutputStream.<init>(Unknown Source) 
java.io.FileOutputStream.<init>(Unknown Source) 
org.apache.tomcat.util.http.fileupload.disk.DiskFileItem.write(DiskFileItem.java:394) 
com.utils.EventUtil.addImage(EventUtil.java:28) 
com.servlets.UploadServlet.doPost(UploadServlet.java:54) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:648) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
+0

stacktraceをインクルードしても、C:\ Users \ poste hp \ workspace \ .metadata \ .plugins \ org.eclipse.wst.serverの場合はチェックしました。コア\ tmp3 \ wtpwebapps \ maroc_events \ uploadFilesは存在しますか?もしそうでなければ、 'mkdir()'(stacktrace参照)からのエラーであり、親ディレクトリ( 'maroc_events')は存在しますか? – Andreas

+0

はい、テキストが入力されていないときに画像がアップロードされたとします。@Andreas – adamine

+0

また、古い 'File'の代わりに新しい' Path'を使うべきです。 1つの理由は、より良いエラーメッセージを提供するということです。 – Andreas

答えて

0

write()メソッドはエラーをスローします。

あなたはです。は、そのディレクトリにあるファイルに書き込みますが、ファイル名が必要です。おそらく、fileNameは空白です。

わかりませんが、getParts()もファイル以外の部分を返します。つまり、CaptionBoxフィールドの一部も返します。確認するにはpart.getName()を印刷してください。

とにかく1つのファイルしか期待していないので、ループの代わりにrequest.getPart("photo")を使用してください。

関連する問題