如何在django中从android接收图像文件?

时间:2015-10-05 13:09:10

标签: android python django

我无法接收并保存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中接收和保存文件。

有人可以通过指示如何实现这一目标来帮助我吗?

2 个答案:

答案 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()