_Apache-commons-fileupload
_を使用して、client
からserver
にファイルを取得しています(JSP
およびServlet
を使用)。
JSP/HTML
_<form method="POST" action="GetFile" enctype="multipart/form-data">
<input type="file" name="datafile">
<input type="text" name="text1">
<input type="submit" value="Next">
</form>
_
サーブレット:GetFile
_System.out.println(request.getParameter("text1"));
_
ファイルをサーバーにアップロードできますが、servlet
で_text1
_の値を取得できません(null
の値を取得しています_text1
_ servlet
)で、textfield
にアップロードするときに追加情報を送信するために、フォームにこのserver
が必要です。
enctype="multipart/form-data"
_オプションは他のフォームデータの送信を許可していませんか?それが許可されていない場合、この追加のtextfield
をserver
に送信する必要がある他のオプションは何ですか。フォームの_
enctype="multipart/form-data"
_オプションは他のフォームデータの送信を許可していませんか?それを許可しない場合、この追加のテキストフィールドをサーバーに送信する必要がある他のオプションは何ですか?.
いいえ、_enctype="multipart/form-data"
_を使用しても問題はありません。他のフィールドを取得して、そのような形式でファイリングできます。
または、私のコードに他の問題がありますか?
はい、今のところ。 _enctype="multipart/form-data"
_を使用している間は、request.getParameter(name);
を使用して直接パラメーターを取得することはできません。これを使用している間、フォームフィールドはリクエストのパラメーターとして使用できません。これらはストリームに含まれているため、通常の方法では取得できません。これを行う方法は、セクションのアップロードされたアイテムの処理の下の commons-fileuploadの使用に関するドキュメント にあります。
さて、パラメータは失われていません。それは、それらが要求ストリームの一部であることだけです。
リクエストからすべてのアイテムを取得し、アイテムタイプに基づいて繰り返し処理する必要があります。
List items = upload.parseRequest(request);
入手方法はこちら
// Process the uploaded items
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
String name = item.getFieldName();//text1
String value = item.getString();
} else {
processUploadedFile(item);
}
}
_MultipartRequest req = new MultipartRequest(request, UPLOAD_PATH, 1024 * 1024 * 1024);
out.print(req.getParameter("contractNo"));
out.println("<BR>");
Enumeration files = req.getFileNames();
while (files.hasMoreElements()) {
String name = (String) files.nextElement();
String filename = req.getFilesystemName(name);
String type = req.getContentType(name);
File uploadedFile = req.getFile("xlFile");
FileInputStream fis = new FileInputStream(uploadedFile);
BufferedReader in = new BufferedReader(new InputStreamReader(fis));
FileWriter fstream = new FileWriter(UPLOAD_PATH + name, true);
BufferedWriter out11 = new BufferedWriter(fstream);
String aLine = null;
while ((aLine = in.readLine()) != null) {
//Process each line and add output to Dest.txt file
out11.write(aLine);
out11.newLine();
}
// do not forget to close the buffer reader
in.close();
// close buffer writer
out11.close();
}
_
上記のコードは、他のフォームデータと共にファイルを読み取ります。req.getParameter();
メソッドof _MultipartRequest req
_オブジェクトを見てください。
com.oreilly.servlet.MultipartRequest
_に含まれるサーブレット/ .Javaファイルに_Web-Inf/classes
_をインポートしますサーブレットにdoPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
メソッドを追加
MultipartRequest m = new MultipartRequest(request、 "C:\ SavingDirectory");
次に、以下のようにフォームから変数を呼び出します。
_String pdate = m.getParameter("plandate");
_
out.println(pdate);
のようにサーブレットから出力します
サーブレットでHTMLフォームフィールドを取得するためのベストプラクティスは、Apache commons-fileupload 1.3 jarを使用することです。
イテレータを使用してマルチパートHTTPServletRequestを反復処理し、forループを使用して、それがFormField()かどうかを確認します。
String item1=null,item2=null,item3=null;
if(item.isFormField())
{
if(item.getFieldName().equals("field1"))
{
item1=item.getString();
}
if(item.getFieldName().equals("field2"))
{
item2=item.getString();
}
if(item.getFieldName().equals("field3"))
{
item3=item.getString();
}
}
そしてあなたのHTMLファイルはこのようになるはずです
<html>
<body>
<form action="servletname" method="post" enctype="multipart/form-data">
<input type="text" name="field1">
<input type="text" name="field2">
<input type="text" name="field3">
<input type="file" name="filetoupload">
<input type="submit" value="Upload">
</form>
</body>
</html>