Intereting Posts
Как включить / отключить прокрутку панели инструментов программно при использовании библиотеки поддержки дизайна Как создать уведомление, подобное приложению Play Music от Google Как удалить всех слушателей, добавленных с помощью addTextChangedListener Как создавать уведомления, которые не исчезают при нажатии на Android? Google Firebase выйдет и забудет пользователя в приложении для Android Добавление панели действий в список Запустить Android-приложение Android для отправки ожидающих сообщений Есть ли хорошие примеры коротких кодов, которые просто читают новое сообщение Gmail? JNI падает при вызове CallVoidMethod Вам действительно нужно проверить, что службы Google Play используют AdMob? Как изменить цвет строки состояния для соответствия приложению в Lollipop? Android – определение цветов путем ссылки на другие определенные цвета Какой-нибудь быстрый эмулятор для Android? Это боль, чтобы развиваться с использованием эмулятора по умолчанию Android OnCreateOptionsMenu () вызов супер Эффект затухания между макетами

Загрузка большого файла в multipart с использованием OkHttp

Каковы мои возможности для загрузки одного большого файла (точнее, на s3) в multipart на Android с помощью OKhttp?

Solutions Collecting From Web of "Загрузка большого файла в multipart с использованием OkHttp"

На странице OkHttp Recipes этот код загружает изображение в Imgur:

private static final String IMGUR_CLIENT_ID = "..."; private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png"); private final OkHttpClient client = new OkHttpClient(); public void run() throws Exception { // Use the imgur image upload API as documented at https://api.imgur.com/endpoints/image RequestBody requestBody = new MultipartBuilder() .type(MultipartBuilder.FORM) .addPart( Headers.of("Content-Disposition", "form-data; name=\"title\""), RequestBody.create(null, "Square Logo")) .addPart( Headers.of("Content-Disposition", "form-data; name=\"image\""), RequestBody.create(MEDIA_TYPE_PNG, new File("website/static/logo-square.png"))) .build(); Request request = new Request.Builder() .header("Authorization", "Client-ID " + IMGUR_CLIENT_ID) .url("https://api.imgur.com/3/image") .post(requestBody) .build(); Response response = client.newCall(request).execute(); if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); System.out.println(response.body().string()); } 

Вам нужно будет адаптировать это значение к S3, но требуемые классы должны быть одинаковыми.

Получите OkHttp 2.1 и используйте MultipartBuilder.addFormDataPart() который принимает имя файла в качестве параметра.

  /** * Upload Image * * @param memberId * @param sourceImageFile * @return */ public static JSONObject uploadImage(String memberId, String sourceImageFile) { try { File sourceFile = new File(sourceImageFile); Log.d(TAG, "File...::::" + sourceFile + " : " + sourceFile.exists()); final MediaType MEDIA_TYPE = sourceImageFile.endsWith("png") ? MediaType.parse("image/png") : MediaType.parse("image/jpeg"); RequestBody requestBody = new MultipartBuilder() .type(MultipartBuilder.FORM) .addFormDataPart("member_id", memberId) .addFormDataPart("file", "profile.png", RequestBody.create(MEDIA_TYPE_PNG, sourceFile)) .build(); Request request = new Request.Builder() .url(URL_UPLOAD_IMAGE) .post(requestBody) .build(); OkHttpClient client = new OkHttpClient(); Response response = client.newCall(request).execute(); return new JSONObject(response.body().string()); } catch (UnknownHostException | UnsupportedEncodingException e) { Log.e(TAG, "Error: " + e.getLocalizedMessage()); } catch (Exception e) { Log.e(TAG, "Other Error: " + e.getLocalizedMessage()); } return null; } 

Отредактировано для okhttp3:

 compile 'com.squareup.okhttp3:okhttp:3.4.1' 

RequestBody заменяется на:

 RequestBody requestBody = new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("uploaded_file", filename, RequestBody.create(MEDIA_TYPE_PNG, sourceFile)) .addFormDataPart("result", "my_image") .build(); 

Загружено демо на GITHUB :

Я добавил свой ответ для загрузки нескольких изображений 🙂

Для okhttp 2.6.0 {

  try { File file = new File(Environment.getExternalStorageDirectory().getPath()+"/xxx/share/" + "ic_launcher.png"); String contentType = file.toURL().openConnection().getContentType(); RequestBody fileBody = RequestBody.create(MediaType.parse(contentType), file); RequestBody requestBody = new MultipartBuilder() .type(MultipartBuilder.FORM) .addFormDataPart("fileUploadType","1") .addFormDataPart("miniType",contentType) .addFormDataPart("ext",file.getAbsolutePath().substring(file.getAbsolutePath().lastIndexOf("."))) .addFormDataPart("fileTypeName","img") .addFormDataPart("Filedata","ss.png",fileBody) .build(); Request request = new Request.Builder() .url(Contains.MULTIPARTY_POST) .post(requestBody) .build(); okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Request request, IOException e) { runOnUiThread(new Runnable() { @Override public void run() { tvGetNews.setText("upload fail"); } }); } @Override public void onResponse(Response response) throws IOException { runOnUiThread(new Runnable() { @Override public void run() { tvGetNews.setText("upload success"); } }); } }); } catch (IOException e) { e.printStackTrace(); } }