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 未被弃用。addTextBody
和 addPart
有什么区别?
addPart 是私有的。
@TrevorHart 最新版本 4.5.6, addPart
似乎仍然是公共 API,请参阅最新版 API docs以上是关于MultipartEntity 类型已弃用的主要内容,如果未能解决你的问题,请参考以下文章
Activity 类型的方法 managedQuery(Uri, String[], String, String[], String) 已弃用
Hibernate 5.2 版本 -> 很多查询方法已弃用?