2017-11-13 23 views
0

私はretrofitを使用してサーバーに画像をアップロードしていますが、画像は正常にアップロードされていますが、拡張子はありません。 イメージ名のみがデータベースにアップロードされているため、拡張機能はありません。 イメージが私にとって役に立たなくなった。 ヘルプを提供してください。ここ はinterface-の私の方法です>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; 
    } 

私たちは、マルチパートリクエストとして送信するマルチパート体内にリクエストボディとイメージにフィールドを変換する必要があります。これはあなたの仕事を行います。それはその後、upvoteしてください動作するかどうか

+0

おかげで私はこの –

+0

を試してみてください。 – kunwar97