4

サーブレットにポストバックされるファイル アップロード フォームがあります (マルチパート/フォーム データ エンコーディングを使用)。サーブレットでは、Apache Commons を使用してアップロードを処理しようとしています。ただし、フォームには単純なフィールドである他のフィールドもいくつかあります。リクエストからこれらのパラメータを読み取るにはどうすればよいですか?

たとえば、私のサーブレットには、アップロードされたファイルを読み取る次のようなコードがあります。

    // Create a factory for disk-based file items
    FileItemFactory factory = new DiskFileItemFactory();
    // Create a new file upload handler
    ServletFileUpload upload = new ServletFileUpload(factory);
    // Parse the request
    Iterator /* FileItem */ items = upload.parseRequest(request).iterator();
    while (items.hasNext()) {
        FileItem thisItem = (FileItem) items.next();
        ... do stuff ...
    }
4

3 に答える 3

10

次のようなことを試すことができます:

while (items.hasNext()) {
        FileItem thisItem = (FileItem) items.next();
        if (thisItem.isFormField()) {
            if (thisItem.getFieldName().equals("somefieldname") {
                String value = thisItem.getString();
                // Do something with the value
            }
        }

    }
于 2008-12-08T20:54:48.970 に答える
3

これを理解するのに数日かかりましたが、ここにあり、機能します。マルチパートデータ、ファイル、およびパラメーターを読み取ることができます。コードは次のとおりです。

    try {

        ServletFileUpload upload = new ServletFileUpload();
        FileItemIterator iterator = upload.getItemIterator(req);
        while(iterator.hasNext()){


            FileItemStream item = iterator.next();
            InputStream stream = item.openStream();
            if(item.isFormField()){
                if(item.getFieldName().equals("vFormName")){

                    byte[] str = new byte[stream.available()];
                    stream.read(str);
                    full = new String(str,"UTF8");
                }
            }else{
                byte[] data = new byte[stream.available()];
                stream.read(data);
                base64 = Base64Utils.toBase64(data);
            }
        }

    } catch (FileUploadException e) {

        e.printStackTrace();
    }
于 2011-11-02T20:17:28.997 に答える
-3

request.getParam() はもう試しましたか?

于 2008-12-08T20:39:36.457 に答える