Retrofit2 выдает ошибку ConnectionShutdownException при загрузке файла с использованием Multipart - PullRequest
0 голосов
/ 20 октября 2019

Я использую библиотеку Retrofit2 для запросов http. Это работает отлично, за исключением случаев, когда я пытаюсь загрузить изображение с помощью Multipart. Я выбираю изображение из галереи и успешно настраиваю imageUri для просмотра изображений. Затем я беру изображение, полученное uri из средства выбора изображений, чтобы объявить файл и загрузить if (согласно некоторым учебникам на Youtube).

Это мой интерфейс Retrofit

@Multipart
@POST("fm/upload.php")
Call<ResponseBody> callServerUrlSubmitNewOrderWithFiles(
        @Part MultipartBody.Part photo);

Это мой httpФункция вызова (imageUri) - это изображение, полученное из средства выбора изображений:

File originalFile = new File(image1Uri.getPath());

RequestBody filePart = RequestBody.create(

       MediaType.parse(getContentResolver().getType(image1Uri)),
       originalFile
    );

 //wrapping the file
 MultipartBody.Part file = 
   MultipartBody.Part.createFormData("photo", 
   originalFile.getName(), 
   filePart);


    //create retro instance
    Retrofit.Builder builder = new Retrofit.Builder()
            .baseUrl("https://mywebsite.net/")
            .addConverterFactory(GsonConverterFactory.create());

    Retrofit retrofit = builder.build();

    //get client & call object for the request
    RetroFit2Calls client = retrofit.create(RetroFit2Calls.class);

    //finally, execute the request
    Call<ResponseBody> call = 
 client.callServerUrlSubmitNewOrderWithFiles(file);

 call.enqueue(new Callback<ResponseBody>() {
        @Override
        public void onResponse(Call<ResponseBody> call, 
    Response<ResponseBody> response) {
            Log.e(TAG, "onResponse: Uploaded"+ response.message() 
    );

        }

        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) 
   {
            Log.e(TAG, "onFailure: ",t );

        }
    });

Я получаю следующую ошибку (onFailure):

E/SubmitRequest: onFailure: 
okhttp3.internal.http2.ConnectionShutdownException
    at okhttp3.internal.http2.Http2Connection.newStream(Http2Connection.java:248)
    at okhttp3.internal.http2.Http2Connection.newStream(Http2Connection.java:231)
    at okhttp3.internal.http2.Http2Codec.writeRequestHeaders(Http2Codec.java:117)
    at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:50)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147) 

...

Вот манифест разрешения:

   <uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

1 Ответ

0 голосов
/ 21 октября 2019

Нашел решение здесь: https://stackoverflow.com/a/43714729/5157228

Я пропустил запрос на разрешение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...