我无法接收并保存Django中从Android发送的文件。
使用改造和以下代码发送文件:
@Multipart
@PUT("/users/{id}")
void modifyPic(
@Header("auth_token") String token,
@Path("id") int userid,
@Part("request[data][param][title]") String title,
@Part("request[data][param][Photo]") TypedFile avatar,
Callback<User> cb
);
但是我不知道如何在django中接收和保存文件。
有人可以通过指示如何实现这一目标来帮助我吗?
答案 0 :(得分:1)
Retrofit处理文件时遇到的问题很少,所以我真的建议你将你的库从beta1升级到beta2,它会更好。
在beta2中,你的api看起来像这样 -
public interface ApiInterface {
@Multipart
@POST ("/api/Accounts/editaccount")
Call<User> editUser (@Header("Authorization") String authorization, @Part("file\"; filename=\"pp.png\" ") RequestBody file , @Part("FirstName") RequestBody fname);
}
“RequestBody文件”部分中的“文件”是您需要在服务器端访问的文件实体名称。
这就是你如何称呼这个请求 -
File file = new File(imageUri.getPath());
RequestBody fbody = RequestBody.create(MediaType.parse("image/*"), file);
RequestBody name = RequestBody.create(MediaType.parse("text/plain"), firstNameField.getText().toString());
Call<User> call = client.editUser(getToken(), fbody, name, id);
call.enqueue(new Callback<User>() {
@Override
public void onResponse(retrofit.Response<User> response, Retrofit retrofit) {
}
@Override
public void onFailure(Throwable t) {
}
});
这是 ayon115 在此链接的改造库讨论中写的代码副本 - https://github.com/square/retrofit/issues/1063
我使用了相同的概念,它对我很顺利。
我真的建议你去那个链接阅读有关库的讨论以及beta1到beta2之间的区别。
如果您在测试服务器/客户端时遇到问题。
您可以访问www.requestb.in并部署测试服务器,以便测试来自客户端的http请求,这样您每次都不需要运行服务器:)
要测试您的客户端,您可以使用POSTMAN工具向您的服务器发出请求。
希望这有帮助。
答案 1 :(得分:0)
可能是这样的:
imageInBase64 = request.POST.get('image')
fh = open("test2.jpg", "wb")
fh.write(imageInBase64.decode('base64'))
fh.close()