Страницы

Поиск по вопросам

понедельник, 23 декабря 2019 г.

Как правильно отправить данные с Json?

#java #android #json


Приложение каждый раз когда обращается к серверу прикрепляет к запросу Json файл
в который складывается все данные

JSONObject data = new JSONObject();
        data.put("1", 1);
        data.put("2", 2);
        data.put("3", 3);


Но теперь нужно с этим файлом отправить 30 мб данных...

Не пойму как правильно сделать? Я так понимаю, что я не могу положить в Json 30 мб
байтов...

Как правильно передать такой запрос?
    


Ответы

Ответ 1



В итоге нужно было прикрепить к заголовку самого HTTPUrlConnection... То есть поток для записи открываем так же просто в заголовок вкладываем все что нам нужно как сопутствующие файлы @Override public HttpURLConnection getHttpURLConnection(URL url, String newValue, Context context) { JSONObject service = getJsonObject(context); HttpURLConnection urlConnection = null; try { urlConnection = (HttpURLConnection) url.openConnection(); if (urlConnection != null) { urlConnection.setRequestProperty("authorization", UtilClass.getAuthToken(context)); urlConnection.setRequestProperty("service", service.toString()); urlConnection.setRequestMethod("POST"); urlConnection.setRequestProperty("Content-Type", newValue); urlConnection.setDoInput(true); urlConnection.setDoOutput(true); urlConnection.setConnectTimeout(10000); urlConnection.connect(); } } catch (IOException e) { e.printStackTrace(); } return urlConnection; }

Ответ 2



Если используете Retrofit2 то можно через него отправить. Сделаете файл с json. И примерно так будет выглядеть метод отправки public interface FileUploadService { @Multipart @POST("upload") Call upload(@Part("description") RequestBody description, @Part MultipartBody.Part file); } private void uploadFile(Uri fileUri) { // create upload service client FileUploadService service = ServiceGenerator.createService(FileUploadService.class); // https://github.com/iPaulPro/aFileChooser/blob/master/aFileChooser/src/com/ipaulpro/afilechooser/utils/FileUtils.java // use the FileUtils to get the actual file by uri File file = FileUtils.getFile(this, fileUri); // create RequestBody instance from file RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file); // MultipartBody.Part is used to send also the actual file name MultipartBody.Part body = MultipartBody.Part.createFormData("picture", file.getName(), requestFile); // add another part within the multipart request String descriptionString = "hello, this is description speaking"; RequestBody description = RequestBody.create( MediaType.parse("multipart/form-data"), descriptionString); // finally, execute the request Call call = service.upload(description, body); call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { Log.v("Upload", "success"); } @Override public void onFailure(Call call, Throwable t) { Log.e("Upload error:", t.getMessage()); } }); } Вот собственно где подробно все расписано: Пример загрузки фала на сервер

Комментариев нет:

Отправить комментарий