通过HTTP从Android上传文件

时间:2014-02-11 10:42:41

标签: android file-upload http-post httprequest mime-types

我正在尝试将Android文件中的XML文件上传到将要解析的URL。作为一个例子,我得到了一个curl命令,它起作用:

curl -F xml=@templ2.xml "http://the-url-to-the-server"

但是当我尝试从我的Android设备发送内容时,我不断收到“无效的xml”作为回复。所以基于this answer我为自己创建了一个php文件来尝试发送文件,看看它是如何发送的:

<?php
print_r($_FILES);
print_r($_REQUEST);
?>

我一直在尝试各种示例代码,但它们都非常相似,所以我认为它们必须是正确的方法。

基本上归结为:我发送文件时没有声明MIME类型(请参阅下面的foo),然后发送为"application/octet-stream",或者我添加了MIME类型"text/xml""application/xml"(参见下面的栏)然后它最终出现在php的$_REQUEST中,我认为这意味着它不是作为文件发送的。

HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(postReceiverUrl);

MultipartEntity reqEntity = new MultipartEntity();
reqEntity.addPart("foo", new FileBody(file));
reqEntity.addPart("bar", new FileBody(file, "text/xml"));

httpPost.setEntity(reqEntity);
httpClient.execute(httpPost);

给出

Array
(
    [foo] => Array
    (
        [name] => templ2.xml
        [type] => application/octet-stream
        [tmp_name] => /tmp/phppWbgl8
        [error] => 0
        [size] => 203
    )
)
Array
(
    [bar] => <foo>
            <bar>
            </bar>
            </foo>
)

我尝试过代码的一些相关问题:

2 个答案:

答案 0 :(得分:0)

而不是

reqEntity.addPart("bar", new FileBody(file, "text/xml"));

尝试这样做

reqEntity.addPart("bar");
httpPost.addHeader("Content-Type", "application/xml");

答案 1 :(得分:0)

我发现了我的问题。当我查看curl命令时,我意识到xml=@templ2.xml意味着我必须使用xml作为参数的名称。所以

reqEntity.addPart("xml", new FileBody(file));