0

アップロードされたファイルと同じ入力タイプと名前の複数フォーム フィールド値を解析したいのですが、私の設計では、Java スクリプトを使用して複数ファイル アップロード フィールドと、ユーザーがファイルの説明を入力できるようにするテキスト フィールドを生成しています。ユーザーは好きなだけフィールドを添付できます。

HTML 要素を作成するための Java スクリプト

var d = document.createElement("div");
var file1 = document.createElement("input");
file1.setAttribute("type", "text");
file1.setAttribute("name", "fileName"+upload_number);
d.appendChild(file1);
var file = document.createElement("input");
file.setAttribute("type", "file");
file.setAttribute("name", "attachment"+upload_number);
d.appendChild(file);
document.getElementById("moreUploads").appendChild(d);
upload_number++;

対応する HTML

<input type="file" name="attachment" id="attachment" onchange="document.getElementById('moreUploadsLink').style.display = 'block';"/>
<div id="moreUploads"></div>
<div id="moreUploadsLink" style="display:none;">
  <a href="javascript:addFileInput();">Attach another File</a>
</div>

私のJavaスクリプトがどのように機能するかを確認してください: http://jsfiddle.net/8k926/90/

私のファイルアップロードサーブレットで、デバッグしようとしましたが、最初に生成された値のみを解析していました.javascriptによって発生した次の生成されたフィールドを解析していません.

私のファイルアップロードサーブレット

 if(item.isFormField())
 {  
   String name = item.getFieldName();  
   if(name != null)  
   {  
     if(name.equals("fileName"))
     {  
       fileName = item.getString();  
     }
     else if(name.equals("main"))
     {  
       main = item.getString();  
     }
     else if(name.equals("sub"))
     {
       sub=item.getString();
     }
     else if(name.equals("filetype"))
     {
       filetype=item.getString();
     }
   }  
}else{  
  String file1=item.getFieldName();
  String file2=item.getName();
  filen=file2;
  ocation = File.separator+"home"+File.separator+"adapco"+File.separator+"Desktop"+ File.separator +"output"+ File.separator +main+File.separator+sub+File.separator+filen;
  uploadFile = new File(location);    
  //code for connecting and inserting the form field values into the database. 
}

単一のファイルをアップロードした後、デバッガーが終了しています。

4

1 に答える 1

0

最初のテキスト フィールドとファイル フィールド名を「fileName1」と「attachment1」に変更します。

JSP:

<input type="text" name="fileName1" size="30" onchange="document.getElementById('moreUploadsLink').style.display = 'block';"/>   
<input type="file" name="attachment1" id="attachment" onchange="document.getElementById('moreUploadsLink').style.display = 'block';"/>

サーブレット:

すべてのフィールドを繰り返します。のようなカウンターを作成します。int cntr=1;

String fileNameField="fileName";
Iterator iter = items.iterator();
while(iter.hasNext()){
    FileItem item = (FileItem) iter.next();
    if(item.isFormField())
     {  
       String name = item.getFieldName();  
       if(name != null)  
       {  
         if(name.equals(fileNameField+cntr))
         {  
           fileName = item.getString();  
         }
         else if(name.equals("main"))
         {  
           main = item.getString();  
         }
             else if(name.equals("sub"))
         {
        sub=item.getString();
         }
         else if(name.equals("filetype"))
         {
        filetype=item.getString();
         }
       }  
    }else{  
      String file1=item.getFieldName();
      String file2=item.getName();
      String filen=file2;
      String location = File.separator+"home"+File.separator+"adapco"+File.separator+"Desktop"+ File.separator +"output"+ File.separator +main+File.separator+sub+File.separator+filen;
      uploadFile = new File(location);    
          try {
         item.write(uploadFile);
      } catch (Exception e) {
         e.printStackTrace();
      }
      //code for connecting and inserting the form field values into the database. 
  }
于 2012-06-28T09:25:23.003 に答える