2016-09-19 41 views
0

我有這樣的:如何獲得java servlet中的上傳文件名?

public void doPost(HttpServletRequest request, 
     HttpServletResponse response) throws IOException, ServletException { 
    response.setContentType("text/html"); 
    PrintWriter out = response.getWriter(); 
    try{ 
     sentfilename = printNames(request); 
     MultipartRequest multipartRequest = new MultipartRequest(request, ImageDirecoty, 1024*1024*5); 
    } catch(IOException e){ 
     response.sendError(HttpServletResponse.SC_CONFLICT, "File limit has exceeded or it wasn't an actual image"); 
     System.out.println(e.getMessage()); 
     return; 
    } 
} 

public String printNames(HttpServletRequest request) throws IOException, ServletException{ 
     for(Part part : request.getParts()){ 
      Collection<String> headers = part.getHeaders("content-disposition"); 
      if (headers == null) 
       continue; 
      for(String header : headers){ 
       String filename = header.substring(header.indexOf("filename=") + 10 , header.length()); 
       String result = filename.replace("\"", ""); 
       return result; 
      } 
     } 
     return null; 
} 

基本上我上傳從客戶端一個簡單的文件,現在我需要的文件名了,成功地通過printNames功能採取的請求數據和請求數據寫信給我filepath,現在的問題是,正如你可以看到我的doPost() try如果我把printNames函數首先我可以得到文件名,但它不寫數據,如果我把MultipartRequest首先我可以得到fileupload,但我沒有得到文件名。

希望不作任何混亂,在此先感謝

回答

0

可以從部分對象本身得到它

String fileName = part.getSubmittedFileName();

例如:

@Override 
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
    Deque<FileInfo> files = new LinkedList<>(); 
    for (Part part : req.getParts()) { 
     long fileSize = part.getSize(); 
     String fileName = part.getSubmittedFileName(); 
     if (fileSize == 0 && (fileName == null || fileName.isEmpty())) { 
      continue; // Ignore part, if not a file. 
     } 
     FileInfo info = new FileInfo(UUID.randomUUID(), fileSize, fileName, part.getContentType()); 

     files.add(info); 
     Files.copy(part.getInputStream(), new File(uploads, info.getId().toString()).toPath()); 
    } 

    req.getSession().setAttribute("uploadedFiles", files); 
    resp.sendRedirect(applicationUrl + "/upload"); 
} 

來源:http://ursaj.com/upload-files-in-java-with-servlet-api

何它有幫助!

+0

和你在哪裏調用'MultipartRequest()' – darees

+0

用servlet的API 3.1,你可以簡單地註釋servlet類'@WebServlet ... @MultipartConfig( fileSizeThreshold = 16768, maxRequestSize = 10L * 1024 * 1024 , maxFileSize = 10L * 1024 * 1024 )' –

+0

不知何故,這不是與我一起工作,我有必要使用'MultipartRequest()'本身,你有任何想法與'MultipartRequest() – darees

相關問題