いつもお世話になります。
javaを勉強している初心者です。
表題の件に関して、前回の質問で同時に送信してゲットパラメータでデータを受け取るのは出来ないという事を教えていただき挑戦中なのですがわからないところが多々ありますのでご教授お願いいたします。
最終的にやりたいことは、「アップデートされた画像のパス」と「ファイルの名前」をテーブルに格納することです。
1.エラー
「upload.parseRequest(request);」に波線が付いてしまいます。
エラー内容は「型 FileUploadBase のメソッド parseRequest(RequestContext) は引数 (HttpServletRequest) に適用できません」となってしまいますがどのように対応したらよいでしょうか?
2.ファイル名の受け取り
jspのformで送信しているされている<input type="text" name="note"><br/>の値の取得の仕方はどのようにすればよいでしょうか?こちらは日本語対応でproperNameなどの変数に入れたいと思っています。
3.保存先のフォルダ
画像を保存するのWEB-INFの中が良いのでしょうか?
その場合WEB-INFの下にpictureフォルダを作成して
String path = getServletContext().getRealPath("WEB-INF/picture");
のように表記をするのでしょうか?
JSP <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!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=UTF-8"> <title>Insert title here</title> </head> <body> <form method="POST" enctype="multipart/form-data" action="UpLoad"> ファイルを選んでください<input type="file" name="upfile"><br/> ファイル名を入れてください<input type="text" name="note"><br/> <br/> <input type="submit" value="Press"> to upload the file! </form> </body> </html>
サーブレット package picAndText; import java.io.File; import java.io.IOException; import java.util.Iterator; import java.util.List; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.tomcat.util.http.fileupload.FileItem; import org.apache.tomcat.util.http.fileupload.FileUploadException; import org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory; import org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload; /** * Servlet implementation class UpLoad */ @WebServlet("/UpLoad") public class UpLoad extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //保存先ディレクトリを指定(下記の場合picture/fileName) String path = getServletContext().getRealPath("picture"); //様々なファイルデータを受け取れるオブジェクトを生成 DiskFileItemFactory factory = new DiskFileItemFactory(); //複数のファイルデータ分割して取得できるオブジェクトを生成 ServletFileUpload upload = new ServletFileUpload(factory); //アップロードする際の基準値を設定 factory.setSizeThreshold(1024); upload.setSizeMax(-1); //下記2件は良く分からないからコメントアウト //aactory.setRepository(); //upload.setHeaderEncoding("Windows-31J"); try{ //ファイルデータを取得 List<FileItem> items = upload.parseRequest(request); //Iteratorはコレクションフレーム Iterator<FileItem> iter = items.iterator(); //繰り返し処理で次があればtrueを返す while (iter.hasNext()) { FileItem item = (FileItem)iter.next(); //アップロードされたファイルのみ対象の処理 if (!item.isFormField()){ //PATHを含むファイル名を取得 String fileName = item.getName(); //もしファイル名があるなら if((fileName != null) && (!fileName.equals(""))){ //PATH名を除くファイル名のみを取得 fileName=(new File(fileName)).getName(); //ファイルデータを保存 item.write(new File(path + "/" + fileName)); //ファイル名を取得...したい... String properName = item.getContentType(); } } } //うまくいったらupLoadFinishへ RequestDispatcher dispatcher = request.getRequestDispatcher("WEB-INF/jsp/upLoadFinish.jsp"); dispatcher.forward(request, response); }catch(FileUploadException e){ e.printStackTrace(); }catch (Exception e) { e.printStackTrace(); } } }
2に関しては
getContentType java.lang.String getContentType() リクエストに含まれるメッセージボディの MIME タイプを返しますが、タイプがわからない場合は null を返します。 HTTP Servlet では CGI 環境変数の CONTENT_TYPE の値に相当します。 戻り値: リクエストの MIME タイプの名前を含む String
というのを見つけたのでgetContentTypeなのかと思ってしまっていますがまったくわかりません。
サイトは下記を参考にさせていただきました。一応翻訳なども使い読んでみましたがいまいちわかりません。
コメントも書きながらなので読みにくくて申し訳ありませんがよろしくお願いいたします。
開発環境
OS windows10
エディション enterprise
言語 java8.0.1310.11
MariaDB10.1
HeidiSQL
eclipse NEON
参考サイト
https://commons.apache.org/proper/commons-fileupload/using.html
http://www.javaroad.jp/servletjsp/sj_servlet12.htm
https://www.javadrive.jp/servlet/fileupload_tutorial/index5.html
http://d.hatena.ne.jp/chaoruko/20090828/1251452593
http://www.jajakarta.org/commons/fileupload-1.0/ja/withoutPrimary/org/apache/commons/fileupload/FileItem.html#getFieldName()
追加画像
リンク
https://www.javadrive.jp/servlet/fileupload_tutorial/index5.html
回答2件
あなたの回答
tips
プレビュー