0

ユーザー入力に応じてパスが動的に変更されるように、文字列をファイル パスにマージするために、プログラムでドロップダウン値を取得したいと考えています。

ここに私のコードがあります:

 @Override
public void doPost(HttpServletRequest request, 
           HttpServletResponse response)
          throws ServletException, java.io.IOException 
{
       //FileItem f1;
   String d1= request.getParameter("sel1");
    String d2=request.getParameter("sel2");
    String d3="/home/adapco/Desktop/output";
    String conc=d3+"/"+d1+"/"+d2+"/";
    filePath=(new StringBuilder()).append(conc).toString();
 //      filePath="/home/adapco/Desktop/output/";
  isMultipart = ServletFileUpload.isMultipartContent(request);
}

私はデバッグしようとしましたが、ライトファイルパスを取得していますが、さらに進んでいる間、fileItems は size=0 を示し、size0 のためにループに入っていません。

    filePath="/home/adapco/Desktop/output/";

アップロード パスを filePath に渡すと、正常に動作します。

  List fileItems = upload.parseRequest(request);    
  Iterator i = fileItems.iterator();
  while ( i.hasNext () ) 
  {
     FileItem fi = (FileItem)i.next();
     if ( !fi.isFormField () )  
     {         
        String fieldName = fi.getFieldName();
        String fileName = fi.getName();
        String contentType = fi.getContentType();
        boolean isInMemory = fi.isInMemory();
        long sizeInBytes = fi.getSize();
        if( fileName.lastIndexOf("\\") >= 0 ){
           file = new File( filePath + 
           fileName.substring( fileName.lastIndexOf("\\"))) ;
        }else{
           file = new File( filePath + 
           fileName.substring(fileName.lastIndexOf("\\")+1)) ;
        }
        fi.write( file ) ;
        out.println("Uploaded Filename: " + fileName + "<br>"+filePath);

     }

私のhtml:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
 <title>File Uploading Form</title>
</head>
<body>
<h3>File Upload:</h3>
 Select a file to upload: <br />
 <form action="upload" method="post"
                    enctype="multipart/form-data">
<input type="file" name="file">
 <br />
<select name="sel1"> 
<option label ="1">aerospace</option>
<option label ="2">automotive</option>
</select>
<select name="sel2">
<option label="1">internal</option>
<option label="2">demo</option>
 </select>
 <input type="submit" value="Upload File" />
 </form>
 </body>
</html>
4

1 に答える 1

1

request.getParameter()呼び出しを削除する必要があります。Apache Commons FileUpload が解析する前に、リクエスト本文が解析される原因となっています。はリクエストrequest.getParameter()には使用しないでください。multipart/form-data

の通常のフォーム フィールドを収集する必要がelseありますif (!fi.isFormField())

if (!fi.isFormField()) {
    // Collect uploaded files.
}
else {
    // Collect normal form fields.
}

FileUpload ユーザー ガイドこの回答も参照してください。

于 2012-05-18T11:44:17.787 に答える