Каковы правильные места для параметров в Ohttp при вызове составной формы?


Я пытаюсь скопировать jpg-файл, загруженный с помощью OKHttp, в составную форму на PHP-сервере. Я считаю, что я получил некоторые параметры в неправильном месте, у меня нет знакомства с составными формами в http и номенклатуре.

Вот что я пытаюсь сделать

Разместить параметры (пары значений name): myuser, token, types to https://www.somesite.com/jpgphotoupload.php

Затем я делаю запрос на составную форму с помощью метод POST, со следующим: путь: https://www.somesite.com/jpgphotoupload.php

Данные файла: JPEG сжатые данные изображения размером 480 x 640 (это я понимаю)

MimeType: image / jpeg (это я понимаю)

Не уверен, где следующие пары значений имен должны быть помещены как часть запроса составных форм, попробовал addFormDataPart

Параметры: снова форма параметра выше, (myuser, token, types)

Имя: imagefile

Имя файла: myname.jpg

Кроме того, вот что еще может быть уместно

            "Connection" , "Keep-Alive"
            "ENCTYPE", "multipart/form-data"
            "Content-Type", "multipart/form-data"

Вот код, который у меня есть в данный момент.

MediaType MEDIA_TYPE_JPG = MediaType.parse("image/jpg");

            OkHttpClient client = new OkHttpClient();
                RequestBody requestBody = new MultipartBuilder()
                        .type(MultipartBuilder.FORM)
                        .addPart(
                                Headers.of("Content-Disposition", "form-data; name="imagefile""),
                                RequestBody.create(MEDIA_TYPE_JPG, new File("/storage/emulated/0/download/camerapic.jpg")))
                        .addFormDataPart("myuser", getprefmyuser(getBaseContext()))
                        .addFormDataPart("token", getpreftoken(getBaseContext()))
                        .addFormDataPart("types", "type1")
                        .addFormDataPart("fileName", "myname.jpg")
                        .build();

                Request request = new Request.Builder()
                        .header("myuser", getprefmyuser(getBaseContext()))
                        .header("token", getpreftoken(getBaseContext()))
                        .header("type", "car")
                        .url("https://www.somesite.com/jpgphotoupload.php")
                        .post(requestBody)
                        .build();

            Response response = null;
            try {
                response = client.newCall(request).execute();
            } catch (IOException e) {
                e.printStackTrace(); 
        ... 

        return null;
        }
1 7

1 ответ:

В моем случае мне нужно было загрузить видео в корзину Amazon S3. Вот что сработало для меня.

File sourceFile = new File(myUri);

RequestBody requestBody = new MultipartBuilder()
                    .type(MultipartBuilder.FORM)
                    .addFormDataPart("keyOne", "valueOne")
                    .addFormDataPart("keyTwo", "valueTwo")
                    .addFormDataPart("file", "myFileName", RequestBody.create(MediaType.parse("video/quicktime"), sourceFile))
                    .build();