2015-07-21 66 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; 
} 
相关问题