【问题标题】:How to send a multi-part that contain Array of strings and array of files如何发送包含字符串数组和文件数组的多部分
【发布时间】:2020-07-10 14:26:20
【问题描述】:

我正在使用以下代码发送包含多参数类型的 post multipart 请求:

    @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 的@Part 参数不得在注释中包含部件名称。 (参数#10)

当我退出文件时,后端无法获取我的 RequestBody 值。

如何发送包含字符串数组和文件数组的多部分?

【问题讨论】:

  • \\如果我的答案有效..请将其标记为已接受的答案..提前致谢

标签: android kotlin retrofit2


【解决方案1】:

试试这个tutorial 对我有很大帮助

按照本教程 .. 你必须改变 这一行

@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)

我希望它有效^_^

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 2021-06-20
    • 2021-04-05
    • 2015-04-11
    相关资源
    最近更新 更多