質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

Q&A

解決済

2回答

8725閲覧

JSPから画像をサーバーにアップしたい

GH_usami13

総合スコア24

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

0グッド

0クリップ

投稿2015/10/17 13:02

編集2015/10/17 13:35

JSPでファイルを

html

1<input type="file" name="file1" size="75">

このように指定して、サーブレット側でそのファイルを受け取って、
base64形式に変換したいです。

現状は画像の絶対パスは取得できていて、
その画像のファイル名は取得できております。

その後にFileInputStreamでファイルをバイト配列にしたいのですが、
FileNotFoundExceptionになってしまいます。

java

1File file = new File(filePath);

java

1FileInputStream fileInputStream = new FileInputStream(file);

としていおります。

filePathは下記のような値になっております。

/ワークスペース/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/プロジェクト名/格納するパス名/ファイル名

jspでsubmitした時のスタックトレースを記載いたします。

java.io.FileNotFoundException: 上記のパス (No such file or directory) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(FileInputStream.java:138) at javax.servlet.http.HttpServlet.service(HttpServlet.java:646) at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 以下省略

また、サーブレット側のソースコードを記載いたします。

java

1String path = getServletContext().getRealPath("files"); 2DiskFileItemFactory factory = new DiskFileItemFactory(); 3ServletFileUpload upload = new ServletFileUpload(factory); 4factory.setSizeThreshold(1024); 5upload.setSizeMax(4000 * 1024); 6upload.setFileSizeMax(3000 * 1024); 7upload.setHeaderEncoding("UTF-8"); 8try { 9 List list = upload.parseRequest(request); 10 Iterator iterator = list.iterator(); 11 while (iterator.hasNext()) { 12 FileItem fItem = (FileItem) iterator.next(); 13 if (!(fItem.isFormField())) { 14 fileName = fItem.getName(); 15 long size = fItem.getSize(); 16 17 if ((fileName != null) && (!fileName.equals(""))) { 18 String fileName2 = (new File(fileName)).getName(); 19 filePath = path + "/" + fileName; 20 21 File file = new File(filePath); 22 FileInputStream fileInputStream = new FileInputStream(file); //エラー 23 24 in.close(); 25 } 26 } 27 } 28...

皆様のお力添えのほど、よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KiyoshiMotoki

2015/10/17 13:10

'filePath'に代入されている値と"FileNotFoundException"のスタックトレースを追記して下さい。 差し支えなければ、例外が発生している近辺のコードも、断片ではなくある程度のブロックで記述して下さい。 そうすればより詳しい状況が分かるので、具体的な回答が得やすくなります。
GH_usami13

2015/10/17 13:33

情報が足りずに申し訳ございません。追記致しました。よろしくお願いいたします。
guest

回答2

0

アップロードされたファイルには直接アクセスしないで、保存先を指定してFileItemに渡します。

lang

1while (iterator.hasNext()) { 2 FileItem fItem = (FileItem)iterator.next(); 3 System.out.println(fItem); 4 if (!(fItem.isFormField())) { 5 String fileName = fItem.getName(); 6 long size = fItem.getSize(); 7 if ((fileName != null) && (!fileName.equals(""))) { 8 String fileName2 = (new File(fileName)).getName(); 9 String filePath = path + "/" + fileName; 10 // FileInputStream fileInputStream = new FileInputStream(file); //エラー 11 File file = new File(filePath); 12 try { 13 fItem.write(file); 14 } catch (Exception e) { 15 e.printStackTrace(); 16 } 17 } 18 } 19}

参考リンク:
ファイルアップロードプログラム - おちラボ

投稿2015/10/17 15:30

argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

GH_usami13

2015/10/19 02:53

ご回答ありがとうございます。 大変参考になりました。
guest

0

ベストアンサー

情報の追記、ありがとうございます。

コードを拝見したところ、ストリームオブジェクトの組み立て方が気になりました。

質問者様のコードではサーブレットコンテキストから得たパスを使用していますが、
以下のリンクではFileItem#getInputStream()メソッドで直接、InputStreamを取得しています。
http://qiita.com/shintaness/items/55b610c770a08605d1fa

公式のサンプルコードも同様でした。

こちらの方法を試してみてはいかがでしょうか?

投稿2015/10/17 15:12

KiyoshiMotoki

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

GH_usami13

2015/10/19 02:48

ご回答ありがとうございます。 おかげさまで、期待する値を取得できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問