2017-11-13 10 views
0

이미지를 서버에 업로드하는 데 retrofit을 사용하고 있지만 이미지는 성공적으로 업로드되지만 확장은 허용되지 않습니다. 이미지 이름 만 데이터베이스에 업로드 중이므로 확장 프로그램이 존재하지 않습니다. 이미지가 나를 위해 쓸모 없게되었습니다. 도움을 제공해주십시오. 여기에 인터페이스 - 나의 방법> 우리는 다중 요청으로 보낼 수있는 다중 본체에 요청 본문과 이미지로 필드를 변환 할 필요가개선판을 사용하여 이미지 업로드 관련 문제

@FormUrlEncoded 
     @POST("/webservices/AssessorAssetsUpload.php") 
     Call<ImageModel> uploadImage(
      @Field("name")String pictype, 
      @Field("type")String uploadtype, 
      @Field("accesser_id")String asses_id, 
      @Field("paper_schedule_id")String paper_id, 
      @Field("imagefile")String image 
     ); 


    my activity code-> 

     String image=imagetoString(); 

      RetrofitInterface retrofit=ApiClient.getApiClient().create(RetrofitInterface.class); 
      Call<ImageModel> call=retrofit.uploadImage(imageName,"image",assessor_id,paperId,image); 

      call.enqueue(new Callback<ImageModel>() { 
       @Override 
       public void onResponse(Call<ImageModel> call, Response<ImageModel> response) { 
        System.out.println(response.body().getStatus()+" "+response.body().getMsg()+" "+response.body().getUrl()); 

       } 
       @Override 
       public void onFailure(Call<ImageModel> call, Throwable t) { 
        t.printStackTrace(); 
       } 
      }); 
     } 

    private String imagetoString(){ 
    ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.JPEG, 90, stream); 
    byte[] bytes=stream.toByteArray(); 
     return Base64.encodeToString(bytes,Base64.DEFAULT); 
    } 

답변

0
We use Multipart instead of formurlencoded in case of any multimedia object. 

    @Multipart 
     @POST("/webservices/AssessorAssetsUpload.php") 
     Call<ImageModel> uploadImage(
      @Part("name")RequestBody pictype, 
      @Part("type")RequestBody uploadtype, 
      @Part("accesser_id")RequestBody asses_id, 
      @Part("paper_schedule_id")RequestBody paper_id, 
      @Part("imagefile")MultipartBody.Part image 
     ); 


    MultipartBody.Part image=imagetoPart(); 

      RetrofitInterface retrofit=ApiClient.getApiClient().create(RetrofitInterface.class); 
      Call<ImageModel> call=retrofit.uploadImage(
       getTextRequest("imageName"), 
       getTextRequest("image"), 
       getTextRequest("assessor_id"), 
       getTextRequest("paperId"), 
       image 
       ); 

      call.enqueue(new Callback<ImageModel>() { 
       @Override 
       public void onResponse(Call<ImageModel> call, Response<ImageModel> response) { 
        System.out.println(response.body().getStatus()+" "+response.body().getMsg()+" "+response.body().getUrl()); 

       } 
       @Override 
       public void onFailure(Call<ImageModel> call, Throwable t) { 
        t.printStackTrace(); 
       } 
      }); 
     } 

    private String imagetoPart(){ 

     Bitmap bitmap = BitmapFactory.decodeFile("Image Path"); 
     ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 90, stream); 
     byte[] bytes=stream.toByteArray(); 
     RequestBody reqFile = RequestBody.create(MediaType.parse("image/*"), bytes); 
     MultipartBody.Part part = MultipartBody.Part.createFormData("name", "name", reqFile); 

     return part; 
    } 

private RequestBody getTextRequest(String body) { 

     RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain"), body); 

     return requestBody; 
    } 

입니다. 이것은 당신의 일을 할 것입니다.

+0

감사합니다. 이걸 시도하십시오 –

+0

작동하는 경우 upvote하십시오. – kunwar97