在Android中 - 如何构建OkHttp请求以将图像上传到flickr?

时间:2015-02-11 10:37:50

标签: android file-upload flickr okhttp

我感谢任何有关构建将图像上传到flickr的OkHttp请求的帮助。

我搜索过stackoverflow,google,yahoo以及其他任何地方,但似乎无法找到解决方案。

我成功完成了oauth授权过程,可以搜索和下载图像数据等,但是我很难尝试使用OkHttp上传图像。我想我设法使用普通的旧httpUrlConnection上传图像,但我想用OkHttp来做。

我怀疑我的问题在于我没有正确地在OkHttp中构建请求/ requestBody(我不太了解http,多种形式等)。这就是我建立我的要求的方式:

    final RequestBody requestBody = new MultipartBuilder()
            .type(MultipartBuilder.FORM)
            .addPart(
                    Headers.of("Content-Disposition", "form-data; name=\"photo\""),
                    RequestBody.create(MEDIA_TYPE_PNG, imageFile))
            .build();

    Request request = new Request.Builder()
            .url(uri.toString())
            .post(requestBody)
            .build();

这是我从flickr得到的错误:

<rsp stat="fail">
<err code="100" msg="Invalid API Key (Key has invalid format)" />
</rsp>

(顺便说一句,我能够成功地将图片上传到imgur)。

我怀疑它与API密钥有关,因为它已成功用于搜索授权。我认为问题可能在于OkHttp&#34;构建请求的方式&#34;。

这里根据flickr应该是什么样子:

如果你手动构建POST查询而不是使用某种服务库,它应该看起来像这样。所有行结尾必须是\ r \ n。

POST / services / upload / HTTP / 1.1 内容类型:multipart / form-data;边界= --------------------------- 7d44e178b0434 主持人:api.flickr.com 内容长度:35261

----------------------------- 7d44e178b0434 内容处理:表格数据;命名=&#34; API_KEY&#34;

3632623532453245 ----------------------------- 7d44e178b0434 内容处理:表格数据;名称=&#34; AUTH_TOKEN&#34;

436436545 ----------------------------- 7d44e178b0434 内容处理:表格数据;命名=&#34; api_sig&#34;

43732850932746573245 ----------------------------- 7d44e178b0434 内容处理:表格数据;命名=&#34;相片&#34 ;;文件名=&#34; C:\ test.jpg放在&#34; 内容类型:image / jpeg

{RAW JFIF DATA} ----------------------------- 7d44e178b0434-- 多部分边界应该是随机生成的,不应出现在有效载荷数据中的任何地方。另外,请不要忘记在RAW JFIF数据之后和最终边界之前结束的行。

所以我的问题是,如何构建OkHttp请求以匹配上述内容?我只需要包含&#34;照片&#34;构建OkHttp请求时的参数,文件名和文件。所有其他参数都包含在传递给我的请求的uri中。

提前致谢

1 个答案:

答案 0 :(得分:0)

不确定这是你想要做的。

您可以使用Flickr API来发出这些请求。 https://www.flickr.com/services/developer/api/

任何需要登录的网站通常都必须使用其API来获取身份验证令牌。

希望这有帮助。