2015-10-05 51 views
2

我一直無法接收並保存在Django中從Android發送的文件。如何從django中的android中接收圖像文件?

@Multipart 
@PUT("https://stackoverflow.com/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

也許是這樣的:

imageInBase64 = request.POST.get('image') 
fh = open("test2.jpg", "wb") 
fh.write(imageInBase64.decode('base64')) 
fh.close() 
1

改造曾與處理文件,所以我真的建議你到庫從β1的升級到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工具向您的服務器發出請求。

希望這會有所幫助。

相關問題