2016-05-10 3 views
2

Я пытаюсь сделать это через несколько дней, и я действительно все .. Вот как выглядит запрос в Почтальон: enter image description hereЗагрузить файл с Модернизированный 2

enter image description here

Я уверен, что все Параметры GET записывались правильно. Проблема в том, как я отправляю файл для загрузки, я полагаю.

  Map<String, RequestBody> map = new HashMap<>(); 
      File file = new File("/storage/emulated/0/ConstructSecure/d1940b05-76d1-4d98-b4b4-b04b8247c8cb.png"); 
      RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), file); 
      String fileName = file.getName(); 
      map.put("attachment\"; filename=\"" + fileName + "\"", requestBody); 

      //GET parameters 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put("inspectionUUID", inspectionUUID); 
      params.put("noteUUID", noteUUID); 
      params.put("attachmentUUID", attachmentUUID); 
      params.put("noteType", noteType); 
      params.put("modifiedTime", modifiedTime); 

      Call<ResponseBody> call = service.upload(access_token,params,map); 
      call.enqueue().... 

Интерфейс:

@Multipart 
    @POST("api/MediaFiles/AddMediaFile") 
    Call<ResponseBody> upload(
      @Header("Authorization") String authorization, 
      /* GET params */ @QueryMap Map<String, String> params, 
      @PartMap Map<String, RequestBody> map 
    ); 

Может кто-нибудь мне помочь?

ответ

5

Я потратил много времени на поиск, как отправить файл в виде байтового потока, потому что все ответы в Интернете объясняют загрузку через RequestBody, но это не работает для моего дела. Итак, вот решение:

InputStream in = new FileInputStream(file); 
    byte[] buf = new byte[in.available()]; 
    while (in.read(buf) != -1) ; 
    RequestBody requestBodyByte = RequestBody 
      .create(MediaType.parse("application/octet-stream"), buf); 
    String content_disposition = "attachment; filename=\"" + fileName + "\""; 

    //GET parameters 
    Map<String, String> params = new HashMap<String, String>(); 
    params.put("inspectionUUID", inspectionUUID); 
    params.put("noteUUID", noteUUID); 
    params.put("attachmentUUID", attachmentUUID); 
    params.put("noteType", noteType); 
    params.put("modifiedTime", modifiedTime); 

    Call<ResponseBody> call = service.upload(access_token, content_disposition, requestBodyByte, params); 

Интерфейс:

@POST("api/MediaFiles/AddMediaFile") 
    Call<ResponseBody> upload(
      @Header("Authorization") String authorization,@Header("Content-Disposition") String content_disposition, @Body RequestBody photo, 
      /* GET params */ @QueryMap Map<String, String> params 
    ); 
+0

Как я могу сделать, если мне нужно отправить несколько файлов в один хит API. – Shivang

0

Загрузить изображение Смотрите здесь нажмите на эту ссылку

http://mushtaq.16mb.com/retrofit_example/uploads/

enter image description here

import retrofit2.Retrofit; 
import retrofit2.converter.gson.GsonConverterFactory; 

class AppConfig { 

    private static String BASE_URL = "http://mushtaq.16mb.com/"; 

    static Retrofit getRetrofit() { 

     return new Retrofit.Builder() 
       .baseUrl(AppConfig.BASE_URL) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .build(); 
    } 
} 

======================================================== 
import okhttp3.MultipartBody; 
import okhttp3.RequestBody; 
import retrofit2.Call; 
import retrofit2.http.Multipart; 
import retrofit2.http.POST; 
import retrofit2.http.Part; 

interface ApiConfig { 
    @Multipart 
    @POST("retrofit_example/upload_image.php") 
    Call<ServerResponse> uploadFile(@Part MultipartBody.Part file, 
            @Part("file") RequestBody name); 

    /*@Multipart 
    @POST("ImageUpload") 
    Call<ServerResponseKeshav> uploadFile(@Part MultipartBody.Part file, 
            @Part("file") RequestBody name);*/ 

    @Multipart 
    @POST("retrofit_example/upload_multiple_files.php") 
    Call<ServerResponse> uploadMulFile(@Part MultipartBody.Part file1, 
             @Part MultipartBody.Part file2); 
} 






https://drive.google.com/open?id=0BzBKpZ4nzNzUMnJfaklVVTJkWEk 
Смежные вопросы