JSPで掲示板を作成しているのですが
CGIのような画像貼り付け掲示板を作成しようと思っています。
画像ファイルを決まったフォルダにアップロードしたいと思っているのですが
javaがまだ初心者のためよくわからないのですが
お教えいただけないでしょうか?
よろしくお願います。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

 以下は、strutsのMultipartIteratorクラスを使ったサーブレットとjsp(html)の一例です。



-----jsp(html)-----

<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<head><title>File Uploader</title></head>
<body>
<form action="http://localhost:8080/minnaservlet/89680" method="post" enctype="multipart/form-data">
File:<input type="file" name="file"><br>
<input type="submit" value="Send FileData">
</form>
</body>
</html>

-----サーブレット-----

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.struts.upload.*;

public class fileupload extends HttpServlet {

public void doPost(HttpServletRequest req, HttpServletResponse res) {

int Int1;

try {

res.setContentType("text/html");
PrintWriter PW = res.getWriter();
PW.println("<html><head><title>Upload</title></head>");

MultipartIterator Ite = new MultipartIterator(req);
MultipartElement Ele;
FileOutputStream OutFile = new FileOutputStream(new File(getServletContext().getRealPath("/tmp89680")));
FileInputStream InFile;

while ((Ele = Ite.getNextElement()) != null) if (Ele.isFile()) {
InFile = new FileInputStream(Ele.getFile());
while((Int1 = InFile.read()) != -1) OutFile.write(Int1);
InFile.close();
};

OutFile.close();

PW.println("<body><br>Upload Done</body>");
PW.println("</html>");

} catch (Exception ex) { System.out.println(ex.toString() + ":Post"); };

};

}
    • good
    • 0

htmlでformタグのENCTYPE=multipart/form-dataを使ってinputタグのtype=FILEで参照したファイルのpostされたデータの取得方法に絞って説明すればいいのでしょうか?というかこれ以外思いつかない(苦笑)



以下に、サンプルがあるので参考にしてみては?

#それ私もほしぃ。完成したら是非公開しましょう(^^)

参考URL:http://home.eastmail.com/~yang/tips/fileUpload.h …
    • good
    • 0

Srevletでの例になってしまうのですが、下記のURLの「Servlet でファイルのアップロードを行いたいのですが?」を参考にされてはいかがでしょうか?



参考URL:http://www.gimlay.org/~andoh/hatena/java/javafaq …
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qformでテキストとファイルタイプの同時受け渡し

以下の質問の続きなのですが、JAVAカテゴリを勧められましたのでこちらで質問させてください。
http://bekkoame.okwave.jp/question/selectbestanswer?aid=18429563&qid=6529772

使用言語はJSPです。

「送信ボタンが押下されたとき、同じ遷移先の画面に「テキスト」「ファイル」タイプのデータを同時に受け渡せないことがわかりました。

(1)
<form action="al.jsp" method="POST">
⇒<input type="radio" name="1" value="2">の受け渡しが可能

(2)
<form action="a.jsp" enctype="multipart/form-data" method="POST">
⇒<input type="file" name="uploadfile" size="50">の受け渡しが可能

送信ボタン押下時に(1)テキスト(2)ファイルデータを同時に受け渡し、
a.jspからrequest.getParameter("1");
で値を取得する方法を教えて頂けないでしょうか。

現在は、
<form action ~>
(1)input
(2)input
</form>
の形式になっています。

以下の質問の続きなのですが、JAVAカテゴリを勧められましたのでこちらで質問させてください。
http://bekkoame.okwave.jp/question/selectbestanswer?aid=18429563&qid=6529772

使用言語はJSPです。

「送信ボタンが押下されたとき、同じ遷移先の画面に「テキスト」「ファイル」タイプのデータを同時に受け渡せないことがわかりました。

(1)
<form action="al.jsp" method="POST">
⇒<input type="radio" name="1" value="2">の受け渡しが可能

(2)
<form action="a.jsp" enctype="multipart/form-data" meth...続きを読む

Aベストアンサー

こんな感じでしょうか。
送られてきたformの名称と値を出力しています。

--全角でインデントしています
if (ServletFileUpload.isMultipartContent(request)) {
 ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory());
 try {
  List items = upload.parseRequest(request);
  for (Iterator ite = items.iterator(); ite.hasNext(); ) {
   FileItem item = (FileItem) ite.next();
   if (item.isFormField()) {
    //getString()の引数はご自身の環境に合わせて設定してください。
    System.out.println(item.getFieldName() + ":" + item.getString("UTF-8"));
   }
  }
 } catch (FileUploadException e) {
  e.printStackTrace();
 }
}

Commons IOのライブラリも必要ですのでご注意を。
例外処理などなにも考慮していないので、あくまで参考程度にしてください。

こんな感じでしょうか。
送られてきたformの名称と値を出力しています。

--全角でインデントしています
if (ServletFileUpload.isMultipartContent(request)) {
 ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory());
 try {
  List items = upload.parseRequest(request);
  for (Iterator ite = items.iterator(); ite.hasNext(); ) {
   FileItem item = (FileItem) ite.next();
   if (item.isFormField()) {
    //getString()の引数はご自身の環境に合わせて設...続きを読む

QJSPでの画像ファイル表示

<img src="~.gif">とすれば、決められた画像は表示できるのですが、"~.gif"の部分に変数を使用して、場合に応じて、ファイル名(数字)が違う画像ファイルを読み込ませたいのです。
その場合当然なのですが、<img src="~" + <% 変数 %> + ".gif">としても、できないんですよね。

何か方法をご存知の方教えてください。よろしくお願いします。

Aベストアンサー

<img src="~ <%= 変数 %>.gif">
じゃないですか?

QJava-jspの画面入力値保持について

画面にテキスト、ラジオボタン、リストボックス とボタンがあります。
ボタンを押すと、JAVAで処理を行い、jspのviewで表示します。

1.テキスト、ラジオボタン、リストボックスなどに値が入力、設定されている状態で
ボタンを押して処理後にテキスト、ラジオボタン、リストボックスの値が
変わらないようにしたいのですが、
その場合、たとえば、入力、設定値をセッションになどに格納しておき
jspの所で、セッションから値を設定すると言うような方法になるのでしょうか?

2.ボタン押して処理後、ラジオボタン、リストボックスの選択値も
  変えないようにしたいのですが、
  これはどのように実現するのが、適切なのでしょうか?


以上、よろしくお願いします。

Aベストアンサー

ボタンというのはフォームのサブミットボタンのことですよ?
つまり、画面遷移が起きることを前提とすると(元の同じ画面に戻るのも含みます)

テキスト、ラジオボタン、リストボックスの状態を「要求パラメータ」として
送信し、それを次画面に反映するというのが最も一般的な方法です。

フレームワーク struts のアクションフォーム&JSPカスタムタグを使うと比較的楽に
そういう画面が作れますが、多くのフレームワークでも大差ありません。
簡単な画面なら素のサーブレート+JSPでも十分作れます。

セッションでもできますが、 セッションはログイン情報などの保持など、
限定された範囲で使うのが普通です。また、結局セッションに最新の
テキスト、ラジオボタン、リストボックスの状態を送るには、「要求パラメータ」
を送信する必要があります。

AJAXを使うという方法もあります。この場合、ボタンは AJAX 処理だけを行い
画面遷移を起こさないので、サーバ側で画面のテキスト、ラジオボタン、
リストボックスの状態をもつ必要はありません。

Q「httpステータス404」というエラーが出ます。

「httpステータス404」というエラーが出ます。

java初心者です、宜しくお願い致します。
EclipseでServletを書いてやりましたが、以下のようなエラーが出ます、
原因はなんでしょうか、宜しくお願い致します。
「httpステータス404-/Servlet%E7%B7%B4%E7%BF%92/ ServOutput」

Aベストアンサー

Not Found
という意味です。
そのファイルが無い。あるいはリンクが間違っています。
詳しくは参考URLをみてください。

参考URL:http://ja.wikipedia.org/wiki/HTTP_404

Qwebアプリケーションでの画像ファイルの保存場所

お世話になります。

Javaと、MySQLでウェブアプリケーションを作成していまして、ユーザーがアップロードしたファイルを
どこのディレクトリに保存すればいいか悩んでいますので、教えてください。

ユーザーがログインし、自分のアイコンを設定した場合、
その画像ファイル(jpgなど)はどのフォルダに置いておけばいいのでしょうか?

例えば、imgフォルダにおいた場合、バージョンアップしたプログラムをデプロイすると、
サーバー内のimgフォルダ内のデータはなくなってしまうと思いますので、ユーザーがアップした画像などは
そこに置いてはいけないと思います(バージョン・アップ時に消えてしまいますので)。

「デプロイしても消されない場所に置けばいい」ということでしょうか?

皆さんはどうされていますでしょうか?

よろしくお願い致します。。

Aベストアンサー

こんにちは。

検索すればいろんなサンプルが出てくると思いますよ。

すごく簡単に書くとしたら

// 画像ファイルのパス
File file = new File ( "/home/・・・・" );
response.setHeader ( "Content-Type", "image/jpeg" );
response.setContentLength ( (int)file.length() );
// 出力と入力
ServletOutputStream out = response.getOutputStream();
BufferedInputStream in = new BufferedInputStream ( new FileInputStream(file) );

int data = 0;

while ( (data = in.read()) != -1 ) {
// 書き出す
out.write(data);
}
in.close();
out.close();

これをサーブレットなりで呼び出してあげれば、任意の場所の画像ファイルを出力します。
(実際の運用ではパラメータでID等を渡してDBからファイル名を取得する)

これを応用すると、必ずサーブレットなりを介さないとファイルには直接アクセスできないため、
認証をさせたり、ダウンロード数を把握したり、期限を設定したりいろいろ出来るようになります。

こんにちは。

検索すればいろんなサンプルが出てくると思いますよ。

すごく簡単に書くとしたら

// 画像ファイルのパス
File file = new File ( "/home/・・・・" );
response.setHeader ( "Content-Type", "image/jpeg" );
response.setContentLength ( (int)file.length() );
// 出力と入力
ServletOutputStream out = response.getOutputStream();
BufferedInputStream in = new BufferedInputStream ( new FileInputStream(file) );

int data = 0;

while ( (data = in.read()) != -1 ) {
// 書き出す
out....続きを読む

Qservletからjspへオブジェクトの配列情報を送る方法

いつもお世話になっております。echo2002です。

さて、今回は以下のような処理を行いたいのですが、可能なのでしょうか?
”servletで作成したオブジェクトの配列をjspにforwardして表示させる”

こんなような処理を考えています。

構成:FileListServletクラス, FileInfomationクラス, disp.jsp

FileInfomationクラスではファイル名やファイルサイズなどの情報を持ち、
それぞれgetなどのアクセサメソッドを持つとします。

FileListServletクラスでの処理
FileInfomationクラスの配列を作成し、各情報をsetする。
HttpServletRequestにsetAttributeでFileInfomation情報を付加し、
disp.jspへforwardする。

※以下の方法を考えています。
request.setAttribute("fileinfo1", fileinfo[0]);
request.setAttribute("fileinfo2", fileinfo[1]);
request.setAttribute("fileinfo3", fileinfo[2]);
・・・
(配列でsetAttributeできるのかわからなかったので、
 とにかくファイルの数分setAttributeしてみました)

getServletContext().getRequestDispatcher("/disp.jsp").forward(req, res)

わからないこと:
disp.jspでどのようにFileInfomationの情報を取得し、
内容を参照できるのかがよくわからないのです。
jspの暗黙オブジェクトrequestを使用して、request.getParameterをすると、
返ってくる値がStringのようなので、FileInfomationクラスにならないんですよね?

突っ込みどころ満載の質問かと思いますが、何かアドバイス頂ければと思います。
オブジェクトの配列をsetAttributeしてjspで読み出せる方法があれば、
それもご教授いただけますでしょうか。
よろしくお願いいたします。jsp難しいです・・・。

いつもお世話になっております。echo2002です。

さて、今回は以下のような処理を行いたいのですが、可能なのでしょうか?
”servletで作成したオブジェクトの配列をjspにforwardして表示させる”

こんなような処理を考えています。

構成:FileListServletクラス, FileInfomationクラス, disp.jsp

FileInfomationクラスではファイル名やファイルサイズなどの情報を持ち、
それぞれgetなどのアクセサメソッドを持つとします。

FileListServletクラスでの処理
FileInfomationクラスの配列を作成し、...続きを読む

Aベストアンサー

setなんちゃらメソッドで値を設定したら、getなんちゃらメソッドを呼べば良かったのです。つまり、set/get以下が同名のメソッド同士をセットで使えば良いのです。
今回の場合は、getAttributeメソッドですね。
戻り値はObjectですがこれはキャストすれば良いのです。
FileInfomation 変数 = (FileInfomation)request.getAttribute("fileinfo1");
てな具合です。

なお、getParameterメソッドは、クライアント(ブラウザ)から送信されたパラメータを取得するメソッドです。

さて、話を次の段階に進めて、配列を受け渡しできるか?となりますが、、できます。
サーブレット側で、
request.setAttribute("キー文字列", fileinfo);
として、JSP側で、
FileInfomation[] 変数 = (FileInfomation[])request.getAttribute("キー文字列");
とすれば、良いのです。

QServletからServletへの値渡し

最近、A-ServletからB-Servletへの遷移は

response.sendRedirect("B-Servlet");

で可能だと教えて頂きました。

ですがもうひとつわからないことがあります。
このときに、B-Servletへ変数を渡したいのですがやり方がわかりません。
わかる方教えてください><

Aベストアンサー

こんにちは。world99です。 sin-da4のご認識の通りでした。
 doGet()で呼び出されたサーブレットから次のサーブレットに遷移する時は、doGet()が実行されます。同じように、doPost()で呼び出されたサーブレットは、doPost()で次のサーブレットを呼び出します。
 実は、私が試したサンプルは、doGet()とdoPost()のどちらが呼び出されても、doProcess()というメソッドを実行するように、実装しています。文章を短くするための、それを端折っていました。という訳で、この事に気がつきませんでした。
 教えているつもりだった私が逆に、教えて頂きましたねありがとうございます。orz
 あるServletから別のServeltに遷移する時に、値を引き渡すという本題の質問は、これで解決ですね♪

QdoGetとdoPostの違い

それぞれブラウザからのリクエストの種類に対応する
メソッドがdoGet,doPost。
doGetはブラウザからGETでそのサーブレットに
リクエストがあった時に、処理が始まるメソッド、
doPostは同じようにPOSTを受け取った時に動き出す

・・・・・ということなのですが、
doGetもdoPostも、中身のコーディングの仕方としては
同様でいいのでしょうか?
いま、doGetでリクエストに対応する処理をうけつけて
いるのですが、255バイトまでなのでdoPostのほうが
いいということがかかれていました。

これは、ブラウザ:Servletのメソッドで対応してれば
いいだけで、結局は送信量の違いだけですか?
そのへんがよくわかってないので教えてください。

ちなみに、doGetでやってる処理は、

public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {

//Bean(workBean)のインスタンス作成
wk = new work_Bean();
//Bean処理実行
wk.Work();





//BeanをJSPに渡すためにHttpServletRequestオブジェクトにセット
request.setAttribute("wk",wk) ;

//ViewであるJSPを呼び出す
RequestDispatcher rDispatcher =
request.getRequestDispatcher("/kanri_JSP.jsp");
rDispatcher.forward(request,response);

こんなかんじでしてます。
あとは、ネットで、人のサンプルとかみると
doGetメソッドに処理をかいており、doPostでは
doGet(request,response);として
doGetをよんでたりするんですが、
これは、PostでもGetと同様の処理ができると
いうことですか?
基本的な質問過ぎるかとおもいますがおしえてください。

それぞれブラウザからのリクエストの種類に対応する
メソッドがdoGet,doPost。
doGetはブラウザからGETでそのサーブレットに
リクエストがあった時に、処理が始まるメソッド、
doPostは同じようにPOSTを受け取った時に動き出す

・・・・・ということなのですが、
doGetもdoPostも、中身のコーディングの仕方としては
同様でいいのでしょうか?
いま、doGetでリクエストに対応する処理をうけつけて
いるのですが、255バイトまでなのでdoPostのほうが
いいということがかかれていました。

これは、ブ...続きを読む

Aベストアンサー

GET と POST では、パラメータをプログラムに渡す仕組みが全く違います。
仕組みが違うので渡せるパラメータの大きさが違う、等の違いが出てきます。

ですが、Servlet では、その違いを request オブジェクトが全部隠してくれて
いるので、気にしなくて良いです。つまり、同じことができて、呼出され方が
違う、と。

普通は、html や JSP の方も、Servlet を意識して書くでしょうから、
どちらかだけの実装で良いのですが、汎用的(呼ぶ人を特定しない)な Servlet
を書こうと思ったら、両方を実装しておく、と理解しておけば良いです。


ちなみに、GET で渡せるパラメータの大きさは 255 バイトと決っているわけでは
ないし、POST で渡せるパラメータの大きさに制限が無い、というわけでもあり
ません。

GET の制限は、どちらかというとブラウザ側の実装によって決ってくることで、
POST に制限があるとしたらサーバ側(例えば、Servlet コンテナ)の実装に
よってきます。

Q
の中に さらに
があるときのSUBMITボタンについて

今、

<FORM ACTION="aaa.asp" METHOD="POST" Name="form1">
<input type="SUBMIT" value="ボタン1">

<FORM ACTION="bbb.asp" METHOD="POST" Name="form2">
<input type="SUBMIT" value="ボタン2">
</FORM>

</FORM>


としていて、ボタン2を押すとbbb.aspに
飛んでほしいのでに、aaa.aspに飛んでしまいます。
こういう場合どのようにすればよいのでしょうか?

それぞれのボタンは hidden の値をそれぞれの
フォームの中の値を渡したいので
どうしてもSubmitがいいのです。

Aベストアンサー

No.4の回答者_Leoですが、分かりにくかったと思いますので、
全ソースのサンプルを記載しますので、参考にして下さい。
No.6のyou111111さんと同じく、JavaScriptを使用しています。
下記をそのまま、新規のhtmlにコピペで使用できますよよヨ。
本来のサイトが使用しているテキストボックス名は'MT'です。
-------------------------------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN">
<!---gooはEUCキャラクタを使っています--->
<html>

<head>
<title>SAMPLE</title>
<meta http-equiv="Content-Type" content="text/html;charset=EUC-JP">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<script language="JavaScript" type="text/javascript">
<!--
//<クリックした時に実行される関数>
//*** 英和辞書
function func1(form){
document.form1.MT.value =form.TXT.value;
document.form1.submit();
}
//*** サーチ
function func2(form){
document.form2.MT.value = form.TXT.value;
document.form2.submit();
}
//-->
</script>
</head>

<body>
<!---実際に画面表示されるフォーム--->
<form>
<input type="text" name="TXT" value="Congratulation" size="40"><br>
<input type="button" onClick="func1(this.form)" value="Eng-JP">
<input type="button" onClick="func2(this.form)" value="goo">
</form>

<!-- 辞書用の仮想フォーム -->
<form name="form1" method="GET"
action="http://dictionary.goo.ne.jp/cgi-bin/dict_search.cgi">
<input type="hidden" name="MT">
<input type="hidden" name="sw" value="0">
</form>

<!--- サーチ用の仮想フォーム --->
<form name="form2" method="GET"
action="http://search.goo.ne.jp/web.jsp">
<input type="hidden" name="MT">
</form>

</body>
</html>

No.4の回答者_Leoですが、分かりにくかったと思いますので、
全ソースのサンプルを記載しますので、参考にして下さい。
No.6のyou111111さんと同じく、JavaScriptを使用しています。
下記をそのまま、新規のhtmlにコピペで使用できますよよヨ。
本来のサイトが使用しているテキストボックス名は'MT'です。
-------------------------------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN">
<!---gooはEUCキャラクタを使っています--->
<html>

<head>
<title>SAM...続きを読む

QJSP使用によるスタイルシート読み込みについて

勉強のため、struts + Eclipseを使用して、JSP
を作成しているのですが、<link>タグを使用して
スタイルシートを読み込みたいのですが、うまく
いきません。(1)のURLでJSPを表示するとうまくい
くのですが、イベントを実行(submit)すると、URL
が(2)に変更されてしまい、読み込めません。

URL(1)
http://localhost:8080/aa/bb/cc/dd/index1.jsp

URL(2)
http://localhost:8080/aa/index1.do

現在、<link>タブは相対パスを指定しているの
ですが、パスを絶対パスに変更すればうまくいき
ます。

変更前(相対パス指定)
<link href="../style.css"・・・>

変更後(絶対パス指定)
<link href=
"http://localhost:8080/aa/bb/cc/style.css"・・・>

他にスタイルシートを読み込む方法はございません
でしょうか。よろしくお願いします。

勉強のため、struts + Eclipseを使用して、JSP
を作成しているのですが、<link>タグを使用して
スタイルシートを読み込みたいのですが、うまく
いきません。(1)のURLでJSPを表示するとうまくい
くのですが、イベントを実行(submit)すると、URL
が(2)に変更されてしまい、読み込めません。

URL(1)
http://localhost:8080/aa/bb/cc/dd/index1.jsp

URL(2)
http://localhost:8080/aa/index1.do

現在、<link>タブは相対パスを指定しているの
ですが、パスを絶対パスに変更すればうまくいき
ます。

...続きを読む

Aベストアンサー

解決したと思いますが、誤った書き込みがあるので訂正します。

>JSP は一度、コンパイルされて、ワークフォルダに実体(.java)ができますから、表示されている JSP の実体がある場所がカレントパスになります。
>こういった事象は、カレントパスの誤認識のせいで起こる場合があります。
の部分は間違いです。
linkタグで指定されたCSSの場所はJSPやサーブレットが解決するわけではなく、ブラウザが解決します。なのでJSPの実体のパスなどは無関係で、カレントパスの誤認識等で起こるわけではありません。むしろ正常な動作です。

URL(1)でアクセスした場合、ブラウザは「http://localhost/aa/bb/cc/dd/」をカレント(現在地)と見なします。
しかし、URL(2)でアクセスした場合、ブラウザは「http://localhost/aa/」をカレントと見なすため、CSSのパスが相対パスで指定された場合、両者のCSSは全く違うものを指すことになります。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング