web-dev-qa-db-ja.com

マルチパートで追加データを送信する

_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"_オプションは他のフォームデータの送信を許可していませんか?それが許可されていない場合、この追加のtextfieldserverに送信する必要がある他のオプションは何ですか。
  • または、私のコードに他の問題がありますか?
11
Bhushan

フォームの_enctype="multipart/form-data"_オプションは他のフォームデータの送信を許可していませんか?それを許可しない場合、この追加のテキストフィールドをサーバーに送信する必要がある他のオプションは何ですか?.

いいえ、_enctype="multipart/form-data"_を使用しても問題はありません。他のフィールドを取得して、そのような形式でファイリングできます。

または、私のコードに他の問題がありますか?

はい、今のところ。 _enctype="multipart/form-data"_を使用している間は、request.getParameter(name);を使用して直接パラメーターを取得することはできません。これを使用している間、フォームフィールドはリクエストのパラメーターとして使用できません。これらはストリームに含まれているため、通常の方法では取得できません。これを行う方法は、セクションのアップロードされたアイテムの処理の下の commons-fileuploadの使用に関するドキュメント にあります。

12
Harry Joy

さて、パラメータは失われていません。それは、それらが要求ストリームの一部であることだけです。

リクエストからすべてのアイテムを取得し、アイテムタイプに基づいて繰り返し処理する必要があります。

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);
    }
}
13
Sudhakar
_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_オブジェクトを見てください。

1
  1. jarファイルcom.oreilly.servlet.MultipartRequestをダウンロードします。
  2. _com.oreilly.servlet.MultipartRequest_に含まれるサーブレット/ .Javaファイルに_Web-Inf/classes_をインポートします
  3. サーブレットにdoPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {メソッドを追加

    MultipartRequest m = new MultipartRequest(request、 "C:\ SavingDirectory");

次に、以下のようにフォームから変数を呼び出します。

_String pdate = m.getParameter("plandate");
_

out.println(pdate);のようにサーブレットから出力します

0
Wandile Nxumalo

サーブレットで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>
0
Cobweb