如果您能帮助我构建将图像上传到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来获得身份验证令牌。
希望这能有所帮助。