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



如果您能帮助我构建将图像上传到flickr的OkHttp请求,我将不胜感激。

我搜索过stackoverflow、谷歌、雅虎和其他任何地方,但似乎都找不到解决方案。

我成功地完成了oauth授权过程,可以搜索和下载图像数据等,但在尝试使用OkHttp上传图像时遇到了麻烦。我想我会设法使用普通的旧httpUrlConnection上传图像,但我想用OkHttp来完成。

我怀疑我的问题在于我没有正确地在OkHttp中构建request/requestBody(我对http、multiforms等不太了解)。这就是我构建请求的方式:

    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"构建请求"的方式。

根据flickr:的说法,它应该是什么样子

如果您手动构建POST查询,而不是使用某种服务库,那么它应该是这样的。所有行尾都必须是\r\n。

POST/服务/上传/HTTP/1.1内容类型:多部分/表单数据;边界=--------------------------------------7d44e178b0434主持人:api.flickr.com内容长度:35261

-----------------------------7d44e178b0434内容处置:表单数据;name="api_key"

3632623532453245-----------------------------7d44e178b0434内容处置:表单数据;name="auth_token"

436436545-----------------------------7d44e178b0434内容处置:表单数据;name="api_sig"

43732850932746573245-----------------------------7d44e178b0434内容处置:表单数据;name="照片";filename="C:\test.jpg"内容类型:图像/jpeg

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

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

提前感谢

不确定这是您想要在这里做的。

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

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

希望这能有所帮助。

最新更新