【问题标题】:The type MultipartEntity is deprecatedMultipartEntity 类型已弃用
【发布时间】:2013-10-12 08:11:37
【问题描述】:

文档说org.apache.http.entity.mime.MultipartEntity 类已被弃用。有人可以给我推荐一个替代方案吗?

我在我的代码中这样使用它:

entity.addPart("params", new StringBody("{\"auth\":{\"key\":\""
            + authKey + "\"},\"template_id\":\"" + templateId + "\"}"));
entity.addPart("my_file", new FileBody(image));
httppost.setEntity(entity);

【问题讨论】:

    标签: java apache


    【解决方案1】:

    如果您仔细阅读文档,您会注意到您应该使用MultipartEntityBuilder 作为替代方案。

    例如:

    MultipartEntityBuilder builder = MultipartEntityBuilder.create();        
    
    /* example for setting a HttpMultipartMode */
    builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
    
    /* example for adding an image part */
    FileBody fileBody = new FileBody(new File(image)); //image should be a String
    builder.addPart("my_file", fileBody); 
    //and so on
    

    注意FileBody类有几个构造函数,你可以通过它们提供mimeType内容类型

    构建指令传递给构建器后,您可以通过调用MultipartEntityBuilder#build() 方法获得构建的HttpEntity

    HttpEntity entity = builder.build();
    

    【讨论】:

    • 我可以问你当我将图像作为多部分文件发布时.. 我应该将 httppost 的标题设置为 httppost.setheader("Content-Type", "multipart/form-data;boundary=" + boundary) ;像这样的东西?
    • 现在,MultipartEntityBuilder 不再是 Android 的一部分,如 API 23。在这种情况下如何处理 multipart/form-data?
    • @kocko 还是谢谢你,但这对我没有帮助,它只表明了一些指导方针,没有太多的技术水平
    • HttpEntity 现在也已弃用。所以不能使用builder.buid()。什么是替代品?
    • 我不能。错误是 'addPart(org.apache.http.entity.mime.FormBodyPart)' 在 'org.apache.http.entity.mime.MultipartEntityBuilder' 中不公开。无法从外部包访问
    【解决方案2】:

    我仍然看到很多教程仍在使用已弃用的 API,这正是我写这篇文章的原因。为了未来的访问者的利益(直到这个 API 被弃用;))

    File image = "...."; 
    FileBody fileBody = new FileBody(image);
    MultipartEntityBuilder builder = MultipartEntityBuilder.create()
                             .setMode(HttpMultipartMode.BROWSER_COMPATIBLE)
                             .addTextBody("params", "{....}")
                             .addPart("my_file", fileBody);
    HttpEntity multiPartEntity = builder.build();
    
    String url = "....";
    HttpPost httpPost = new HttpPost(url);
    httpPost.setEntity(multiPartEntity);
    ...
    

    【讨论】:

    • HttpEntity 被贬低
    • 它仅不推荐用于 android sdk。它仍然可以在其他任何地方使用。 org.apache.commons.HttpEntity 未被弃用。
    • addTextBodyaddPart 有什么区别?
    • addPart 是私有的。
    • @TrevorHart 最新版本 4.5.6, addPart 似乎仍然是公共 API,请参阅最新版 API docs
    猜你喜欢
    • 2014-12-05
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-28
    相关资源
    最近更新 更多