java - http 多部分发布请求,包含 json 和带有 koush/ion 库的图像

标签 java android ruby json http

我正在尝试将由图像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/

相关文章:

java - <? super/extends String> 在方法和变量声明中

java - 使用 JPA 更新集合时出现问题

java - JavaFX TextField 中是否有多个插入符?

php - 如何在android TextView 上查看php脚本的结果

ruby - 有没有人在 Ruby 中遇到过丰富的 GA 框架?

java - 如何将单元格格式设置为文本

android - 开始使用 Android 游戏和 AdMob

ruby-on-rails - 在 ruby​​ on rails 中更新数据库字段

Ruby 读写带引号的 CSV

android - Android 的自定义 ListView 适配器 - 如何在 getView() 中获得正确的 View ?