我正在尝试将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>
)
我尝试过代码的一些相关问题:
答案 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));