retrofit android - при загрузке документа с использованием нескольких частей выдается код ответа 422 - PullRequest
0 голосов
/ 13 июля 2020
@POST
@Path("/")
@PreAuthorize("isFullyAuthenticated()")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED)
public Response addAsset(
    @FormDataParam("file") InputStream uploadedInputStream,
    @FormDataParam("file") FormDataContentDisposition fileDetail,
    @FormDataParam("draftId") Long draftId) throws IOException
{
}

при использовании браузера chrome для просмотра запроса на загрузку файла в разделе «Данные формы» отображается следующее:

------ WebKitFormBoundaryaQvAp0c0jbhLq4af Content-Disposition: form -данные; name = "draftId"

------ WebKitFormBoundaryaQvAp0c0jbhLq4af Content-Disposition: form-data; name = "файл"; filename = "image1.png" Content-Type: image / png

------ WebKitFormBoundaryaQvAp0c0jbhLq4af -

Означает ли это, что значение draftId равно null?

следует ли мне отправлять «draftId» и «file» как составные?

код модернизации, который я пробовал в Android Studio, приведен ниже

API модернизации для запроса загрузки документа:

@POST("resource/asset")
@Multipart
@Headers("Content-Type: multipart/form-data")
fun uploadFile(

        @Part draftId: MultipartBody.Part,
        @Part file: MultipartBody.Part
): Call<ResponseBody>

код, который отправляет запрос на загрузку, приведен ниже:

private fun uploadFile1(fileUri: Uri?) {
  file = com.example.myapplication.utils.FileUtils.getFile(mContext, fileUri)
    // create RequestBody instance from file
    val filePart: RequestBody = RequestBody.create(
            MediaType.parse(activity!!.contentResolver.getType(fileUri!!)!!),
            file
    )

    // MultipartBody.Part is used to send also the actual file name
    val body = MultipartBody.Part.createFormData("file", file!!.name, filePart)
    val draft = MultipartBody.Part.createFormData("draftId",null, draftpp)
    val call = apiInterface.uploadFile(draft, body)
    
         call.enqueue(object : Callback<ResponseBody> {
        override fun onResponse(call: Call<ResponseBody>, response: Response<ResponseBody>) {
            Log.i("Upload", "success")
        }

        override fun onFailure(call: Call<ResponseBody>, t: Throwable) {
            Log.i("Upload error:", t.message)
        }
    })
}

Я получаю код ответа 422, может ли кто-нибудь помочь мне решить проблему?

1 Ответ

0 голосов
/ 14 июля 2020

когда я передал requestBody (для draftId) и multiPart (для файла) для API, он начал работать

val call = apiInterface.uploadFile1 (draftI ddd, body)

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