gpt4 book ai didi

android - 如何使用 Retrofit 上传照片?

转载 作者:太空宇宙 更新时间:2023-11-03 12:50:04 25 4
gpt4 key购买 nike

我在我的 Android 应用程序中使用 Retrofit 与 REST-API 进行通信。当用户在我的应用程序中更改他的个人资料图片时,我需要发送请求并上传新图片。这是我的服务:

 @Multipart
@PATCH("/api/users/{username}/")
Call<User> changeUserPhoto(@Header("Authorization") String token,@Path("username") String userName , @Part("photo") RequestBody photo);

这是我发送请求的代码:

Retrofit retrofit = new Retrofit.Builder()
.baseUrl(GlobalVars.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
UserService userService = retrofit.create(UserService.class);
Callback<User> callback = new Callback<User>() {
@Override
public void onResponse(Response<User> response, Retrofit retrofit) {

if (response.isSuccess()) {
//do sth
} else {
// do sth else
}
}


@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
};
RequestBody photo = RequestBody.create(MediaType.parse("application/image"), new File(imageUir));
Call<User> call = userService.changeUserPhoto(token, username, photo);

call.enqueue(callback);

但是当我向服务器发送这个请求时,REST 一直告诉我照片不是文件并且编码类型有问题。谁能帮我解决这个问题?

最佳答案

尝试使用 @Body 而不是 @Part

@PATCH("/api/users/{username}/")
Call<User> changeUserPhoto(@Header("Authorization") String token,@Path("username") String userName , @Body RequestBody photo);

然后使用MultipartBuilder构建RequestBody

RequestBody photo = RequestBody.create(MediaType.parse("application/image"), file);
RequestBody body = new MultipartBuilder()
.type(MultipartBuilder.FORM)
.addFormDataPart("photo", file.getName(), photo)
.build();

Call<User> call = userService.changeUserPhoto(token, username, body);
...

编辑:

你也可以查看我的answer一个非常相似的问题。

关于android - 如何使用 Retrofit 上传照片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33482385/

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