MultipartEntity 类型已弃用

Posted

技术标签:

【中文标题】MultipartEntity 类型已弃用【英文标题】:The type MultipartEntity is deprecated 【发布时间】: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);

【问题讨论】:

【参考方案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

以上是关于MultipartEntity 类型已弃用的主要内容,如果未能解决你的问题,请参考以下文章

如何手动更新已弃用的类型包

Activity 类型的方法 managedQuery(Uri, String[], String, String[], String) 已弃用

Hibernate 5.2 版本 -> 很多查询方法已弃用?

如何修复已弃用的“按钮样式”

react的类型检查PropTypes自React v15.5起已弃用,请使用prop-types

OAuth2 | ClientCredentialsResourceDetails |已弃用