竹形様
先日は、正規表現についてご丁寧に回答いただきましてありがとうございました。本日は、掲示板でtextだけではなく、ファイルを添付してMySQLへ登録しようと考えているのですが、その前段階でファイルのアップロードがなかなかうまくいきません。どうかご指導をおねがいします。
まず、ファイルを選択しておくるupload.jspは以下のとうりです、
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.disk.*;
import org.apache.commons.fileupload.servlet.*;
/**
* Servlet implementation class UploadFile
*/
public class UploadFile extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public UploadFile() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//(1)アップロードファイルを格納するPATHを取得
String path = getServletContext().getRealPath("UPLOADFILE.DATA");
System.out.println(path);
//(2)ServletFileUploadオブジェクトを生成
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setRepository(new File("C:\\FILEUPLOADTEMP"));
ServletFileUpload upload = new ServletFileUpload(factory);
//(3)アップロードする際の基準値を設定
factory.setSizeThreshold(1024);
upload.setSizeMax(1000 * 1024);
upload.setFileSizeMax(1000 * 1024);
upload.setHeaderEncoding("Windows-31J");
try {
//(4)ファイルデータ(FileItemオブジェクト)を取得し、
// Listオブジェクトとして返す
List list = upload.parseRequest(request);
//(5)ファイルデータ(FileItemオブジェクト)を順に処理
Iterator iterator = list.iterator();
while(iterator.hasNext()){
FileItem fItem = (FileItem)iterator.next();
//(6)ファイルデータの場合、if内を実行
if(!(fItem.isFormField())){
//(7)ファイルデータのファイル名(PATH名含む)を取得
String fileName = fItem.getName();
System.out.println(fileName);
if⇒fileName != null) && (!fileName.equals(""){
//(8)PATH名を除くファイル名のみを取得
// fileName=(new File(fileName)).getName();
//(9)ファイルデータを指定されたファイルに書き出し
fItem.write(new File(path + "\\" + fileName));
// fItem.write(new File(path,fileName));
}
}
}
}catch (FileUploadException e) {
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}
//(10)uploadfile.jspページに戻る
response.sendRedirect("uploadfile.jsp");
}
}
このとき、一時的にアップロードしたファイルをためておくディレクトリ\FILEUPLOADTEMPにアップロードしたファイルのファイル名ではなく、upload_bd31924_11f8d251b33_8000_00000022.tmpのような連番のファイル(おそらくこのファイルがアップロードしたファイルだろうと思われる)が溜まるだけで、ファイル名が正しく反映されません。コンソールにpath名やファイル名を表示させようとしますが、反応しません。
どうかご教示ください。よろしくお願いします。
先日は、正規表現についてご丁寧に回答いただきましてありがとうございました。本日は、掲示板でtextだけではなく、ファイルを添付してMySQLへ登録しようと考えているのですが、その前段階でファイルのアップロードがなかなかうまくいきません。どうかご指導をおねがいします。
まず、ファイルを選択しておくるupload.jspは以下のとうりです、
<%@ page language="java" contentType="text/html; charset=windows-31j"
pageEncoding="windows-31j"%>
<!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=windows-31j">
<title>FileUpload</title>
<meta http-equiv="Content-Type"
content="text/html; charset=Windows-31J">
</head>
<body>
<!-- (1)<FORM>タグにmultipart/form-dataを指定 -->
<form method="POST"
enctype="multipart/form-data"
action="UploadFile">
<!-- (2)ファイルを選択する<input type="file">タグを指定 -->
<input type="file" name="filefd" />
<input type="submit" value="送信" />
</form>
</body>
</html>
ファイルを受け取って保存するサーブレットUploadFile.javaは以下のとおりです。pageEncoding="windows-31j"%>
<!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=windows-31j">
<title>FileUpload</title>
<meta http-equiv="Content-Type"
content="text/html; charset=Windows-31J">
</head>
<body>
<!-- (1)<FORM>タグにmultipart/form-dataを指定 -->
<form method="POST"
enctype="multipart/form-data"
action="UploadFile">
<!-- (2)ファイルを選択する<input type="file">タグを指定 -->
<input type="file" name="filefd" />
<input type="submit" value="送信" />
</form>
</body>
</html>
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.disk.*;
import org.apache.commons.fileupload.servlet.*;
/**
* Servlet implementation class UploadFile
*/
public class UploadFile extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public UploadFile() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//(1)アップロードファイルを格納するPATHを取得
String path = getServletContext().getRealPath("UPLOADFILE.DATA");
System.out.println(path);
//(2)ServletFileUploadオブジェクトを生成
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setRepository(new File("C:\\FILEUPLOADTEMP"));
ServletFileUpload upload = new ServletFileUpload(factory);
//(3)アップロードする際の基準値を設定
factory.setSizeThreshold(1024);
upload.setSizeMax(1000 * 1024);
upload.setFileSizeMax(1000 * 1024);
upload.setHeaderEncoding("Windows-31J");
try {
//(4)ファイルデータ(FileItemオブジェクト)を取得し、
// Listオブジェクトとして返す
List list = upload.parseRequest(request);
//(5)ファイルデータ(FileItemオブジェクト)を順に処理
Iterator iterator = list.iterator();
while(iterator.hasNext()){
FileItem fItem = (FileItem)iterator.next();
//(6)ファイルデータの場合、if内を実行
if(!(fItem.isFormField())){
//(7)ファイルデータのファイル名(PATH名含む)を取得
String fileName = fItem.getName();
System.out.println(fileName);
if⇒fileName != null) && (!fileName.equals(""){
//(8)PATH名を除くファイル名のみを取得
// fileName=(new File(fileName)).getName();
//(9)ファイルデータを指定されたファイルに書き出し
fItem.write(new File(path + "\\" + fileName));
// fItem.write(new File(path,fileName));
}
}
}
}catch (FileUploadException e) {
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}
//(10)uploadfile.jspページに戻る
response.sendRedirect("uploadfile.jsp");
}
}
どうかご教示ください。よろしくお願いします。
投稿:スワジランド[swajiland]/2009年 02月 20日 17時 13分
/更新:2009年 02月 20日 17時 14分
RE:ファイルのアップロードの方法についてお尋ねします
by 竹形 誠司[takegata]
竹形です。こんにちは。
一度ファイルとして保存してしまったものを、その後でMySQLに登録するのは結構難しいと思います。このサイトにFileUploadを使って、そのままMySQLに書き込む方法を書いてありますので、こちらを試してみていただけますか?
http://www.orquesta.org/takegata/Article/ArticleView.jsp?article_id=267
一度ファイルとして保存してしまったものを、その後でMySQLに登録するのは結構難しいと思います。このサイトにFileUploadを使って、そのままMySQLに書き込む方法を書いてありますので、こちらを試してみていただけますか?
http://www.orquesta.org/takegata/Article/ArticleView.jsp?article_id=267
投稿:竹形 誠司[takegata]/2009年 02月 20日 17時 37分
/更新:2009年 02月 20日 17時 38分
竹形様
いつもご親切にありがとうございます。
3日間ほど悪戦苦闘していたのがウソのようにご指導頂いたBlobUploadProcess.jspで解決してしまいました。なんと感謝申し上げればよいのか表現のしようもありません。おまけにMySQLまで登録できてしまい、驚いています。本当にあつかましくて申しわけありませんが、このBlobUploadProcess.jspのなかで示されている
よろしくお願いいたします。
いつもご親切にありがとうございます。
3日間ほど悪戦苦闘していたのがウソのようにご指導頂いたBlobUploadProcess.jspで解決してしまいました。なんと感謝申し上げればよいのか表現のしようもありません。おまけにMySQLまで登録できてしまい、驚いています。本当にあつかましくて申しわけありませんが、このBlobUploadProcess.jspのなかで示されている
<P><a HREF="BlobList.jsp">一覧</a></P>
とある、BlobList.jspもよろしければいただけないでしょうか。よろしくお願いいたします。
投稿:スワジランド[swajiland]/2009年 02月 20日 20時 53分
/更新:2009年 02月 20日 20時 54分
以下に掲載しました。
http://www.orquesta.org/takegata/Article/ArticleView.jsp?article_id=538#A538
拙著の読者様であれば、これぐらいはご自分でお書きになれるはずなんですけどね(笑)
http://www.orquesta.org/takegata/Article/ArticleView.jsp?article_id=538#A538
拙著の読者様であれば、これぐらいはご自分でお書きになれるはずなんですけどね(笑)
投稿:竹形 誠司[takegata]/2009年 02月 20日 21時 38分
/更新:2009年 02月 20日 21時 38分