2

我正在尝试使用 HttpClient 和 MultipartEntity 将图像从 Adroid 应用程序上传到 php 网络服务器。

这是我的代码片段:

protected Void doInBackground(Void... params) {
    HttpClient client = new DefaultHttpClient();
    client.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);

    HttpPost post = new HttpPost( "http://URL/upload.php" );

    try {
        MultipartEntity entity = new MultipartEntity(  );
        entity.addPart("type", new StringBody("photo"));
        entity.addPart("data", new FileBody(new File (this.path)));         
        post.setEntity(entity);
        post.getParams().setBooleanParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE, false);             
        post.addHeader( "Content-Type", "multipart/form-data; ");

        HttpResponse response = client.execute(post);
        HttpEntity resEntity = response.getEntity();

        System.out.println(response.getStatusLine());

        client.getConnectionManager().shutdown();
    } catch (UnsupportedEncodingException e) {          
        e.printStackTrace();
    } catch (ClientProtocolException e) {           
        e.printStackTrace();
    } catch (IOException e) {           
        e.printStackTrace();
    }

    return null;
}

在 php 文件中,我添加了 print_r($_FILE) 来查看数组的内容,它显示的是一个空数组。

执行 HttpClient 后 LogCat 显示以下内容

06-17 14:54:03.908: I/System.out(1256): HTTP/1.1 200 OK
06-17 14:54:03.998: D/111(1256): Array
06-17 14:54:03.998: D/111(1256): (
06-17 14:54:03.998: D/111(1256): )
06-17 14:54:04.068: D/dalvikvm(1256): GC_CONCURRENT freed 200K, 12% free 2559K/2900K, paused 96ms+5ms, total 161ms

谁能告诉我我必须添加到 Android 代码中吗?

4

2 回答 2

0

根据有关使用 MultipartEntity 将数据发布到 url 的博客文章,您可能需要在项目中包含一些额外的 jar 文件。它们包括以下 apache 开源项目: apache-mime4jhttpclient、httpcore 和 httpmime

于 2013-10-09T08:36:36.680 回答
0

在你的构造函数中添加这个:

MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
于 2014-06-19T19:10:33.257 回答