我正在尝试将由图像和json对象参数“状态”组成的多部分数据从Android操作系统发布到Ruby Rails服务器。 我正在制作一个已完成的 iOS 应用程序的 Android 版本,以便服务器端可以正常工作。
但我似乎无法让它在有或没有任何库的 Android 上工作。
在服务器端,必须接收此信息才能工作。
>>>> params: {"status"=>{"body"=>"Make love, not Warcraft. "},
"photo"=>#<ActionDispatch::Http::UploadedFile:0x007f36a89e5738
@tempfile=#<Tempfile:/tmp/RackMultipart20140414-29241-gy4qeo>, @original_filename="iUEb2W9cnxG6",
@content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"photo\";
filename=\"iUEb2W9cnxG6\"\r\nContent-Type: image/jpeg\r\n">, "format"=>"json",
"action"=>"create", "controller"=>"api/statuses", "version"=>"1"}
但是当我这样做时,它不起作用。
JsonParser jp = new JsonParser();
JsonObject postbody = (JsonObject)jp.parse("{\"status\": { \"body\": \""+ text.getText().toString() +"\", \"venue\": null}}");
System.out.println("Start uploading image using Ion Library");
Ion.with(it, The.url("/1/statuses"))
.setHeader("uuid", The.uuid(it).toString())
.setHeader("Content-Type","application/json")
.setMultipartParameter("status", postbody.toString())
.setMultipartFile("image", "image/jpeg", selectedFile)
.asJsonObject()
.setCallback(new FutureCallback<JsonObject>() {
@Override
public void onCompleted(Exception e, JsonObject result) {
System.out.println("Posted result "+ e + " " + result+ The.url("/1/statuses"));
}});
}
}
我从服务器得到的基本上是解析错误。
I, [2014-04-14T17:21:01.411626 #29241] INFO -- : Started POST "/1/statuses" for 64.179.216.50 at 2014-04-14 17:21:01 -0400
D, [2014-04-14T17:21:01.415493 #29241] DEBUG -- : Error occurred while parsing request parameters.
Contents:
------------------------------806fe35005b7480e81c10fc5c7ce33ef
Content-Disposition: form-data; name="status"
{"body":"i h8 u","venue":null}
------------------------------806fe35005b7480e81c10fc5c7ce33ef
Content-Disposition: form-data; name="photo"; filename="img.jpg"
Content-Type: image/jpeg
????E?ExifII*
?2?i???(SAMSUNGGT-I9500I9500UBUEMK12014:04:14 17:20:46HH?,??4"?'???0220?<?P?
d?l?
t?
|??? ?
??|?bH(???%??0100????8??(??? ?
<(?d2014:04:14 17:20:462014:04:14 17:20:46?d?d????d
?d?dASCIId?
?????????#??M?-?@??????????M?-?,??????????M?-???????????M?-???????????M?-????????????M?-????????????M?-???????????IJX??-д\?????X.p/???P?00?????/?BO?
??
???????????????!?o??P???P??????
???
???0?@?A?0F???????????????@?
?????????#??M?-?@??????????M?-?,??????????M?-???????????M?-???????????M?-????????????M?-????????????M?-???????????IJX??-д\?????X.p/???P?00?????/?BO?
??
???????????????!?o??P???P??????
???
???0?@?A?0F???????????????n)?p)?Ăf)?e)?g)?a)?h
A??i)???d)???u)???o)?O?x)??)???)???)???)?L??)???h? (?A??c)??s)?
??)?#??)?(? pG??5?%?????? !??? ` !??@`` !????` !?`??`A?Y??? B???;???F?????????????????????????O?@p??
??M?@??(FP????*FhFP????jF(FO?????*FhFO?????jF(FO???|?*FhFO?????jF(FO???w?*FhFO???~?jF(FO???r?*FhFO???{?jF(FO???m?*FhFO???z?jF(FO???h?*FhFO???w?jF(FO???c?*FhFO??u?jF(FO??^?*FhFO??r?jF(FO??qH?X?O.
在过去的 8 个小时里,我在没有图书馆和各种东西的情况下进行了尝试,并研究了很长时间。我仍然觉得我错过了一些如此简单和明显的东西,但到目前为止我还没有完成很多图像发布请求......任何带有任何库的解决方案都将受到赞赏。
编辑:.setBodyParameter(....) 是一个拼写错误,已修复为 .setMultipartParameter(...) 这就是导致这个结果的代码。 如果有人能给我一段代码来完成我想做的事情,我将非常感激。 谢谢互联网!
最佳答案
使用set setMultipartParameter代替setBodyParameter。我不确定你是如何调用它的,因为它不会在我这边编译。
您使用的是哪个版本的 ion?一个月前有一个修复程序可以删除多部分有效负载中的无关 CRLF:
https://github.com/koush/AndroidAsync/commit/efb6c018bd15060e44086d4f76c3d419d26065ba
关于java - http 多部分发布请求,包含 json 和带有 koush/ion 库的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23070892/