4

如果我像这样将文件上传到我的 servlet:

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.tumblr.com/api/write");

try 
{
    MultipartEntity entity = new MultipartEntity();
    entity.addPart("type", new StringBody("photo"));
    entity.addPart("data", new FileBody(image));
    httppost.setEntity(entity);
    HttpResponse response = httpclient.execute(httppost);
} 
catch (ClientProtocolException e) {} 
catch (IOException e) {}

如何在 servlet 中检索内容?

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws  IOException 
{
     request.???
}
  • 我使用 Google App Server 作为我的 Servlet API
4

1 回答 1

4

如果您的 Servlet 容器或服务器或引擎的版本< 3.0(如 2.5 或更早),您可能需要利用第三方库Apache Commons FileUpload。尽管该文件暗示了对上传文件的使用,但它也有效地处理了从 POST-Methods 上传的已发布数据,就像这里解释的那样

Servlet API,从 3.0 版开始提供一些调用来处理发布的数据,这些数据是在 POST-Request 中发送的。唯一的要求是您的实体内容的 MIME-Type 编码是“ multipart/form-data ”。

然后您可以使用以下任一方式检索内容的每个“部分”:

  1. getPart(String partName):其中“partName”是您的多内容实体的一部分的名称。

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws  IOException 
    {
        String partName = "type"; // or "data"
        Part part = request.getPart(partName);
    
        // read your StringBody type
        BufferedReader reader = new BufferedReader( new InputStreamReader(part.getInputStream()));
        String line ="";
    
        while((line=reader.readLine())!=null)
        {
            // do Something with a line
            System.out.println(line);
    
        }
    
        // or with a binary Data
        partName="data";
        part = request.getPart(partName);
    
        // read your FileBody data
        InputStream is = part.getInputStream();
        // do Something with you byte data
    
        is.read();
        // is.read(b);
        // ..
    
    }
    
  2. 获取零件()

它实现了与 getPart(partName) 相同的结果,而这里的给定数据是已发送数据的所有部分的集合。要检索此集合的 Part 的每个部分,只需对集合使用线程安全迭代:

Iterator<Part> iterator = request.getParts().iterator();
       Part parts = null;
       while (iterator.hasNext()) {
       parts = (Part) iterator.next();
          //rest of the code block removed
       }
    }

因为 getPart()/getParts() 只能从 Servlet 3.0 版本开始工作,所以您要确保使用支持的 Servlet 容器和/或升级您当前的 Servlet 容器。一些支持 3.0 的 Server 或 Servlet 容器:

  1. Tomcat 7.0
  2. 老板网
  3. 树脂
于 2012-05-17T10:53:36.530 回答