2015-07-21 481 views
2

在下面的代碼:如何知道httpservletrequest是否包含一些文件/圖像?

public static MultipartEntity buildMultiEntity(final SlingHttpServletRequest request) { 
     MultipartEntity multipartEntity = null; 
       final Map<String, RequestParameter[]> params = request.getRequestParameterMap(); 
     if(params.containsKey("myfile")) { 
      multipartEntity = new MultipartEntity(); 

      for (final Map.Entry<String, RequestParameter[]> pairs : params.entrySet()) { 
       final String key = pairs.getKey(); 
       final RequestParameter[] parameterArray = pairs.getValue(); 
       final RequestParameter param = parameterArray[0]; 
       InputStream inputStream = null; 
       try { 
        inputStream = param.getInputStream(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
       multipartEntity.addPart(key, new InputStreamBody(inputStream, param.getFileName())); 
      } 
     } 
     return multipartEntity; 
    } 

我確定,如果要求有形象,遵循

if(params.containsKey("myfile")) 

如何識別,如果請求中,即使我不知道形象,什麼是輸入名稱的圖像文件?

+0

這是不完全回答,但你不應該這樣做。請求中的參數應該全部爲你所知。 – libik

+0

嗯,但如果變化呢? – Ronald

+0

如果你不能改變它,那麼你必須以「不好的方式」來做,我明白。但是,如果你正在進行分析,並且你帶着這個 - 你做錯了什麼。 – libik

回答

1

我認爲你可以嘗試使用附件來達到這個目的。 爲此,您需要在您的UI上添加enctype="multipart/form-data"。 這將是水木清華像

<form action="upload" method="post" enctype="multipart/form-data"> 
    <input type="file" name="file" /> 
    // some other inputs 
</form> 

和服務器端

@WebServlet("/upload") 
@MultipartConfig 
public class UploadServlet extends HttpServlet { 
    // ... 
} 

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    Part filePart = request.getPart("file"); 
    String fileName = filePart.getSubmittedFileName(); 
    InputStream fileContent = filePart.getInputStream(); 
    // some job here 
} 

private static String getFileName(Part part) { 
    for (String cd : part.getHeader("content-disposition").split(";")) { 
     if (cd.trim().startsWith("filename")) { 
      String fileName = cd.substring(cd.indexOf('=') + 1).trim().replace("\"", ""); 
      return fileName.substring(fileName.lastIndexOf('/') + 1).substring(fileName.lastIndexOf('\\') + 1); // MSIE fix. 
     } 
    } 
    return null; 
} 
相關問題