Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用MultipartEntity在servlet上获取实体?_Java_Android_Servlets - Fatal编程技术网

Java 如何使用MultipartEntity在servlet上获取实体?

Java 如何使用MultipartEntity在servlet上获取实体?,java,android,servlets,Java,Android,Servlets,如果我像这样将文件上载到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"))

如果我像这样将文件上载到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.???
}
  • 我正在使用GoogleAppServer作为我的ServletAPI

如果Servlet容器或服务器或引擎的版本<3.0(如2.5或更早版本),您可能希望利用第三方库。尽管该文件暗示了对上传文件的使用,但它也有效地处理了来自POST方法的上传发布数据,如它所解释的

版本3.0中的ServletAPI提供了一些调用,以处理发布的数据,并在POST请求中发送。唯一的要求是实体内容的MIME类型编码为“”

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

  • :其中“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);
        // ..
    
    }
    
  • :

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

    Iterator<Part> iterator = request.getParts().iterator();
           Part parts = null;
           while (iterator.hasNext()) {
           parts = (Part) iterator.next();
              //rest of the code block removed
           }
        }
    
    Iterator Iterator=request.getParts().Iterator();
    Part=null;
    while(iterator.hasNext()){
    parts=(Part)迭代器.next();
    //代码块的其余部分已删除
    }
    }
    
    由于getPart()/getParts()仅在Servlet 3.0版本开始工作,因此您将确保使用支持的Servlet容器和/或升级当前的Servlet容器。支持3.0的某些服务器或Servlet容器:

  • :

  • 只需搜索Stackoverflow-数百个问题/答案,包括文件上传+servlet,已经存在!Read@home第一步是搜索网站和本网站,你应该假设这里询问的人已经这样做了。我认为让我自己去搜索不是这个网站的精神所在。所以,至少你应该发布任何链接,而不是只评论go search。我使用的是谷歌应用程序引擎,所以我不知道我是否可以使用Servlet 3.0或如何使用,但我会尝试查找有关它的详细信息。谢谢。GAE Servlet API版本是2.5,所以我想我不能使用它。但是谢谢。@Rami:我根据你的问题编辑了我的答案。如果您再次阅读,您会发现一个指向第三方库“ApacheCommonsFileUpload”的快速演示的链接,该库处理您的情况。享受!!