gpt4 book ai didi

android - Retrofit2 将图像发布为 base64

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:08:48 24 4
gpt4 key购买 nike

我已经使用 Retrofit 很长时间了,但是在这次巨大的更新之后,它变得有点困难 :) 我的问题是我需要在图像编码的 base64 中发送一个 formUrlEncoded 的发布请求。

没有图片,下面的请求工作正常

@FormUrlEncoded
@POST("mypath")
Call<BooleanResponse> updateUser(@FieldMap HashMap<String, String> updatedValues);

但是当我尝试包含图片时,Base64 编码以及然后我得到内部服务器错误 - 我知道这与服务器端无关,因为我有另一个应用程序使用 HttpPost 调用此服务并且工作正常。

这就是我从图像中获取 base64 数据并将其添加到 map 中的方式,我也会将其传递给 updateUser 请求,但这就是行不通。

public static String getProfileImage(ImageView imageView) {
imageView.buildDrawingCache();
Bitmap bm = imageView.getDrawingCache();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG, 40, baos);
byte[] b = baos.toByteArray();
return Base64.encodeToString(b, Base64.DEFAULT);
}

当我搜索时,我发现 Retrofit 会根据 Gson 的请求使用一些序列化,除非我告诉它不要这样做! As in this question

但我不知道如何把它放在 Retrofit2 中,有什么建议吗?

最佳答案

我找到了解决方案。更新后的服务请求如下

@POST("mypath")
Call<BooleanResponse> updateUser(@Body RequestBody updatedBody);

并从 updatedValues 映射创建了一个 RequestBody 对象,并在上面的请求中使用。

FormBody.Builder bodyBuilder = new FormBody.Builder();
Iterator it = changedFieldsMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry) it.next();
bodyBuilder.add((String) pair.getKey(), (String) pair.getValue());
it.remove(); // avoids a ConcurrentModificationException
}
RequestBody requestBody = bodyBuilder.build();
serviceManager.updateUser(requestBody);

关于android - Retrofit2 将图像发布为 base64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35085082/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com