既然 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 对象的子对象的组合,它使用MultipartEnityBuilderHttpEntity 来上传图像和文件。现在它已被弃用,并且现在我已经迁移到 android Studio,我正在寻找一种更新的方法来完成上述任务,但使用目前最好的方法来完成它,它与 API 15 兼容。

我尝试过搜索,但 Google 仍然会在此处返回引用 MultipartEntityBuilderHttpEntity 的指南和问题,所以我想我可以问一下

【问题讨论】:

你读过***.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类等中很容易找到HttpResponseHttpEntity。我在下面的***.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 库上传图像或文件的最佳方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章

持续集成 之 apache-continuum

windows10 phpstudy怎么配置

《转载》Apache HTTP Server 与 Tomcat 的三种连接方式介绍

Apache NiFi 如何从入门到不放弃?

Apache NiFi 如何从入门到不放弃?

linux分析apache日志获取最多访问的前10个IP