Как отправить составную часть, содержащую массив строк и массив файлов - PullRequest
1 голос
/ 30 марта 2020

Я использую следующий код для отправки многостраничного запроса, содержащего тип с несколькими параметрами:

    @Multipart
    @POST("**")
    fun sendRequest(
        @Part("ContactType") contactType: RequestBody? = null,
        @Part("Description") description: RequestBody? = null,
        @Part("ServiceProviderId") serviceProviderId: RequestBody? = null,
        @Part("Title") title: RequestBody? = null,
        @Part("Latitude") latitude: RequestBody? = null,
        @Part("Mobile") mobile: RequestBody? = null,
        @Part("Longitude") longitude: RequestBody? = null,
        @Query("MainActivities[]") mainActivities :ArrayList<String>,
        @Part("Files") files: List<MultipartBody.Part>
    ): Observable<SendRequestResponse>

Вот как я устанавливаю значение:

        val titleBody = createBodyRequestFromString(title.value ?: "")
        val latitudeBody = createBodyRequestFromString(lat.value ?: "")
        val longitudeBody = createBodyRequestFromString(lng.value ?: "")
        val contactTypeBody = createBodyRequestFromString(contactType.value.toString() ?: "")
        val serviceProviderIdBody = createBodyRequestFromString(serviceProviderId.value ?: "")
        val mobileBody = createBodyRequestFromString(phoneNumber.value ?: "")

        val mainActivitiesBody: ArrayList<RequestBody> = ArrayList()
        createBodyRequestFromString(mainActivities.value?.get(0)).let { mainActivitiesBody.add(it) }

    private fun createBodyRequestFromString(string: String?): RequestBody {
        return RequestBody.create("text/plain".toMediaTypeOrNull(), string!!)
    }


    private fun addFileAsMultipart() {
        val imagesParts = ArrayList<MultipartBody.Part>(selectedImages.size)

        selectedImages.forEachIndexed { index, file ->
            val requestBody = RequestBody.create("image/jpeg".toMediaTypeOrNull(), file)
            imagesParts.add(
                MultipartBody.Part.createFormData(
                    "files",
                    file.name,
                    requestBody
                )
            )
        }}

Это продолжает говорить:

@ Параметры детали, использующие MultipartBody.Part, не должны включать имя детали в аннотацию. (параметр # 10)

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

Как я могу отправить несколько частей, которые содержат массив строки и массив файлов?

1 Ответ

0 голосов
/ 30 марта 2020

попробуйте этот учебник мне очень поможет

согласно этому уроку .. вы должны изменить эту строку

@Part("Files") files: List<MultipartBody.Part> //kotlin
@Part("Files) List<MultipartBody.Part> files //java

с этой строкой

@Part files: List<MultipartBody.Part> //kotlin
@Part List<MultipartBody.Part> files //java

и измените эту строку

MultipartBody.Part.createFormData("files",file.name,requestBody)

этой строкой

MultipartBody.Part.createFormData("files[]",file.name,requestBody)

я надеюсь, что это работает ^ _ ^

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