2014-07-17 28 views
0

所以這是我的web.xml:當我在Servlet中調用getName()時,爲什麼我在html中看到文件標籤的name屬性?

<servlet> 
    <servlet-name>UploadFileServlet</servlet-name> 
    <servlet-class>com.tugay.julyseventeen.UploadFileServlet</servlet-class> 
    <multipart-config> 
     <max-file-size>20000</max-file-size> 
     <file-size-threshold>20000</file-size-threshold> 
    </multipart-config> 
</servlet> 

<servlet-mapping> 
    <servlet-name>UploadFileServlet</servlet-name> 
    <url-pattern>/uploadFile</url-pattern> 
</servlet-mapping> 

和窗體我有:

<form action="${pageContext.servletContext.contextPath}/uploadFile" method="post" 
     enctype="multipart/form-data"> 
    <label for="name">Your name here: 
     <input type="text" name="name" id="name"/> 
    </label> 
    <input type="file" name="xxx" id="file"/> 
    <input type="submit"/> 
</form> 

而在Servlet中,我有:

public class UploadFileServlet extends HttpServlet { 

    @Override 
    protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) 
      throws ServletException, IOException { 

     String name = httpServletRequest.getParameter("name"); 
     Part file = httpServletRequest.getPart("xxx"); 

     InputStream inputStream = file.getInputStream(); 
     int read; 
     final byte[] bytes = new byte[1024000]; 

     System.out.println(file.getName()); 

    } 
} 

所以在這裏file.getName ()將返回我「xxx」,我不喜歡。我想獲取正在上傳的文件的名稱。我怎麼能夠?

回答

1

由於Servlet API 3.1,Part接口提供了getSubmittedFileName()方法,它可以滿足您的需求。

獲取客戶端

0

使用Apache提供的Commons Fileupload library,可以輕鬆地爲servlet和Web應用程序添加強大的高性能文件上載功能。

示例代碼:

List<FileItem> multiparts = new ServletFileUpload(
          new DiskFileItemFactory()).parseRequest(request); 

for(FileItem item : multiparts){ 
    if(!item.isFormField()){ 
     String name = new File(item.getName()).getName(); 

    } 
} 

找到完整的代碼herehere

0

我最近使用分段文件,並使用AJAX張貼到我控制器非常類似的東西。

形式:

<form enctype="multipart/form-data" id="inputForm"> 
    <input id="file" type="file" name="file" /> 
</form> 

<input onclick="Javascript: upload()" type="submit" value="Upload" /> 

JS:

function upload() { 
    var data = new FormData($('#inputForm')[0]); 
    $.ajax({ 
     type : 'POST', 
     url : 'upload', 
     data : data, 
     cashe : false, 
     contentType : false, 
     processData : false, 
     success : function(response) { 
      alert(response); 
     }, 
     error : function() { 
      alert("Didn't work"); 
     } 
    }); 
} 

控制器:

@ResponseBody 
@ResponseStatus(HttpStatus.OK) 
@RequestMapping(value = "/upload", method = RequestMethod.POST) 
public String upload(@RequestBody MultipartFile file) { 
    System.out.println("Uploaded - " + file.getOriginalFilename()); 
} 

這應該給你你要找的文件名。

我不知道你是否使用SpringMVC,但如果你是,這就是我所做的。您將要爲MultipartFile導入org.springframework.web.multipart.MultipartFile。

+0

我不使用Spring,但由於指定的文件名。 –

相關問題