JspからCSVファイルをServletに送りたい
Jspから『input type="file"』で指定したcsvファイルをServletに送りJava側でデータの加工を行いたいのですが、アクセス拒否のエラーが発生します。
同じディレクトリ内に『txt』を配置させて、実行するとエラーが発生しないのですが、txt以外だと同じ事象が発生します。
『csv』ファイルなどをServletに送る場合の処理は何か特別な対応が必要なのでしょうか?
色々なサイトを調査してみたのですが、『input type="file"』から『csv』を選択してjava側で加工するコードなどがなく困っています。。
前提
Servletで受け取り処理でエラーが発生します
下記が質問になります。
①『input type="file"』でtxt以外のファイルを選択した時、Servletにデータを送る時に何か特別な処理が必要なのでしょう?
②Servletに送信が可能な場合、ファイルが格納されているディレクトリ情報を送ることもできるのでしょうか?
発生している問題・エラーメッセージ
エラーメッセージ HTTPステータス 500 – Internal Server Error タイプ 例外報告 メッセージ org.apache.tomcat.util.http.fileupload.impl.IOFileUploadException: Processing of multipart/form-data request failed. C:\Users\upload_6f4ecdef_212e_4986_b4c9_6d5e55e3d17f_00000001.tmp (アクセスが拒否されました。) 説明 サーバーは予期しない条件に遭遇しました。それはリクエストの実行を妨げます。 例外 java.io.IOException: org.apache.tomcat.util.http.fileupload.impl.IOFileUploadException: Processing of multipart/form-data request failed. C:\Users\upload_6f4ecdef_212e_4986_b4c9_6d5e55e3d17f_00000001.tmp (アクセスが拒否されました。) org.apache.catalina.connector.Request.parseParts(Request.java:2893) org.apache.catalina.connector.Request.getParts(Request.java:2750) org.apache.catalina.connector.Request.getPart(Request.java:2916) org.apache.catalina.connector.RequestFacade.getPart(RequestFacade.java:803) servlet.sampleCsv.doGet(sampleCsv.java:37) servlet.sampleCsv.doPost(sampleCsv.java:54) javax.servlet.http.HttpServlet.service(HttpServlet.java:555) javax.servlet.http.HttpServlet.service(HttpServlet.java:623) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) 根本原因 org.apache.tomcat.util.http.fileupload.impl.IOFileUploadException: Processing of multipart/form-data request failed. C:\Users\upload_6f4ecdef_212e_4986_b4c9_6d5e55e3d17f_00000001.tmp (アクセスが拒否されました。) org.apache.tomcat.util.http.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:321) org.apache.catalina.connector.Request.parseParts(Request.java:2849) org.apache.catalina.connector.Request.getParts(Request.java:2750) org.apache.catalina.connector.Request.getPart(Request.java:2916) org.apache.catalina.connector.RequestFacade.getPart(RequestFacade.java:803) servlet.sampleCsv.doGet(sampleCsv.java:37) servlet.sampleCsv.doPost(sampleCsv.java:54) javax.servlet.http.HttpServlet.service(HttpServlet.java:555) javax.servlet.http.HttpServlet.service(HttpServlet.java:623) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) 根本原因 java.io.FileNotFoundException: C:\Users\upload_6f4ecdef_212e_4986_b4c9_6d5e55e3d17f_00000001.tmp (アクセスが拒否されました。) java.base/java.io.FileOutputStream.open0(Native Method) java.base/java.io.FileOutputStream.open(FileOutputStream.java:298) java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:237) java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:187) org.apache.tomcat.util.http.fileupload.DeferredFileOutputStream.thresholdReached(DeferredFileOutputStream.java:151) org.apache.tomcat.util.http.fileupload.ThresholdingOutputStream.checkThreshold(ThresholdingOutputStream.java:200) org.apache.tomcat.util.http.fileupload.ThresholdingOutputStream.write(ThresholdingOutputStream.java:126) org.apache.tomcat.util.http.fileupload.util.Streams.copy(Streams.java:104) org.apache.tomcat.util.http.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:317) org.apache.catalina.connector.Request.parseParts(Request.java:2849) org.apache.catalina.connector.Request.getParts(Request.java:2750) org.apache.catalina.connector.Request.getPart(Request.java:2916) org.apache.catalina.connector.RequestFacade.getPart(RequestFacade.java:803) servlet.sampleCsv.doGet(sampleCsv.java:37) servlet.sampleCsv.doPost(sampleCsv.java:54) javax.servlet.http.HttpServlet.service(HttpServlet.java:555) javax.servlet.http.HttpServlet.service(HttpServlet.java:623) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) 注意 原因のすべてのスタックトレースは、サーバのログに記録されています。
該当のソースコード
JSP/HTML
1 <form action="/DataConvertSample/sample-csv"enctype="multipart/form-data" method="post"> 2 <label>取込データ :</label> 3 <input type="file" name="file"><br> 4 <input type="submit" value="送信"> 5 </form>
該当のソースコード
Servlet
1@WebServlet("/sample-csv") 2@MultipartConfig(location="C:\\Users", maxFileSize=1048576) 3 4public class sampleCsv extends HttpServlet { 5 private static final long serialVersionUID = 1L; 6 7 /** 8 * @see HttpServlet#HttpServlet() 9 */ 10 public sampleCsv() { 11 super(); 12 // TODO Auto-generated constructor stub 13 } 14 15 /** 16 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 17 */ 18 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 19 20 // 選択ファイルを受信 21 Part part = request.getPart("file"); 22 // ファイル名を取得 23 String filename=part.getSubmittedFileName(); 24// Path p = Path.of(filename); 25// System.out.print(p); 26 //Path path = Paths.get(null); 27 28 29 RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/jsp/kekka.jsp"); 30 rd.forward(request, response); 31 } 32 33 /** 34 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 35 */ 36 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 37 // TODO Auto-generated method stub 38 doGet(request, response); 39 } 40 41} 42

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。