既然 apache 的 MultipartEntityBuilder 已被弃用,那么使用 Volley 库上传图像或文件的最佳方式是啥?
Posted
技术标签:
【中文标题】既然 apache 的 MultipartEntityBuilder 已被弃用,那么使用 Volley 库上传图像或文件的最佳方式是啥?【英文标题】:What's the best way to upload an image or file using Volley library now that apache's MultipartEntityBuilder is deprecated?既然 apache 的 MultipartEntityBuilder 已被弃用,那么使用 Volley 库上传图像或文件的最佳方式是什么? 【发布时间】:2016-01-25 08:11:56 【问题描述】:我曾经有一个Request
对象的子对象的组合,它使用MultipartEnityBuilder
和HttpEntity
来上传图像和文件。现在它已被弃用,并且现在我已经迁移到 android Studio,我正在寻找一种更新的方法来完成上述任务,但使用目前最好的方法来完成它,它与 API 15 兼容。
我尝试过搜索,但 Google 仍然会在此处返回引用 MultipartEntityBuilder
和 HttpEntity
的指南和问题,所以我想我可以问一下
【问题讨论】:
你读过***.com/questions/32240177/…了吗? 是的,但是byte[]
变量传入构造函数,你是怎么得到的?如果要上传多个文件怎么办?
在我的示例代码中,字节数组来自getFileDataFromDrawable
,我已经上传了2个文件// the first file buildPart(dos, fileData1, "ic_action_android.png"); // the second file buildPart(dos, fileData2, "ic_action_book.png");
我真的很喜欢这个解决方案,让我使用您的解决方案制作一个更紧凑和模块化的类。稍后我会发布它
其实我的解决方案并不完美,因为谷歌的volley在里面使用了Apache的库,在BasicNetwork类等中很容易找到HttpResponse
或HttpEntity
。我在下面的***.com/questions/32472263/… 也有一个问题。请看一下。
【参考方案1】:
你可以在你的帖子中说清楚,如果是这样的话,它在 API 22 中已被弃用,你现在可以使用 URLconnection,这是一个示例“:
private StringBuffer request(String urlString)
// TODO Auto-generated method stub
StringBuffer chaine = new StringBuffer("");
try
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setRequestProperty("User-Agent", "");
connection.setRequestMethod("POST");
connection.setDoInput(true);
connection.connect();
InputStream inputStream = connection.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(inputStream));
String line = "";
while ((line = rd.readLine()) != null)
chaine.append(line);
catch (IOException e)
// writing exception to log
e.printStackTrace();
return chaine;
【讨论】:
【参考方案2】:您是对的,MultipartEntity
已被弃用,但您现在可以使用 MultipartEntityBuilder
。这是一个例子:
private void uploadVideo(String videoPath)
try
HttpClient client = new DefaultHttpClient();
File file = new File(videoPath);
HttpPost post = new HttpPost(server +"/api/docfile/");
MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
entityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
entityBuilder.addBinaryBody("uploadfile", file);
// add more key/value pairs here as needed
HttpEntity entity = entityBuilder.build();
post.setEntity(entity);
HttpResponse response = client.execute(post);
HttpEntity httpEntity = response.getEntity();
Log.v("result", EntityUtils.toString(httpEntity));
catch(Exception e)
e.printStackTrace();
【讨论】:
这和我现在做的完全一样。您使用什么库或包才能使用 MultipartEntituBuilder 和 HttpEntity? 从mvnrepository.com/artifact/org.apache.httpcomponents/httpmime/… 下载 Apache HttpClient Mime 4.3.1 jar 文件并将其添加到您的 eclipse 或 android studio 项目中 不推荐使用 apache 吗?以上是关于既然 apache 的 MultipartEntityBuilder 已被弃用,那么使用 Volley 库上传图像或文件的最佳方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章