2013-01-17 10 views
0

以下HTML代碼片段向發送請求到一個servlet SendFileName爲什麼我在請求FileName時變空?

<form method="post" action="SendTheFileName" enctype="multipart/form-data"> 
       <div id="Files_to_be_shared"> 
         <input type="file" id="File" name="FileTag" /> 
         <input type="submit" value="Share" /> 
       </div> 
</form> 

在servlet的POST方法我試圖通過調用來獲取文件名:

String FileName = request.getParameter("FileTag") 

但我正在逐漸null。這是爲什麼 ?

我正在使用Apache公共文件上傳。它工作正常。我不知道爲什麼當enctype是multipart/form-data而僅使用jdk時,我爲null。

+0

你必須使用commons文件上傳或類似的東西解析請求。試試這些鏈接:http://commons.apache.org/fileupload/ – Renjith

+0

@Renjith _have to_ means?爲什麼它返回'null'? –

+2

我認爲問題是enctype的b'coz。它是_multipart/form-data_ – saplingPro

回答

1

的Servlet 3.0 API(Java EE 6的)提供了一些方法來訪問多文章的內容:

HttpServletRequest.getParts() 你應該有一個Part的文件,併爲每個參數。

0

當您使用enctype="multipart/form-data"所有形式參數被傳爲多。

FileItemFactory factory = new DiskFileItemFactory(); 
ServletFileUpload upload = new ServletFileUpload(factory); 
List items = upload.parseRequest(request); 

// Process the uploaded form items 
Iterator iter = items.iterator(); 
while (iter.hasNext()) { 
    FileItem item = (FileItem) iter.next(); 

    if (item.isFormField()) { 
     // ** here you get the non-file parameters ** 
    } else { 
     processUploadedFile(item); 
    } 
} 
+0

沒有辦法使用jdk獲取文件名嗎?上面的方法是使用apache commons –

+0

不,使用多部分時,瀏覽器將所有內容都發送爲多部分:file(data + filename),parameters,...除非您自己編寫RFC 1867的實現,否則必須使用某些庫提取每個部分。 Java SE不包括一個。你不使用Commons FileUpload嗎? – bwt

+0

我正在使用。但我正在使用jsk來做這件事。你確定沒有辦法嗎? –

0

你越來越null因爲當形式是「多/表單數據」的entype和你的輸入類型爲「文件」不會裏面的HttpServletRequest requestParameterMap去()。

你必須使用這樣的Java EE 6的另一種選擇:

Part filePart = request.getPart("FileTag"); // or "File" - I am not sure 
              // that not for id value 
              // you should search 
String fileName = filePart.getName(); 

此外,如果你可以使用JSF不僅僅是java的EE Servlet的存在(在JSF 2.2)是輸入型=「文件中的特殊標記「:

<h:inputFile value="#{myFileUploader.file}"/> 


這應該有所幫助。

相關問題