Загрузите файл на сервер amazon S3 без повреждения составного файла

#android #retrofit

Вопрос:

Загрузка файла в amazon S3. С помощью PUT, без нескольких частей, с динамическим URL-адресом, проблема с кодировкой URL-адреса, файл поврежден.

Ответ №1:

Я много борюсь, Есть ответы, но они распределены здесь и там. Это заняло у меня полтора дня, поэтому я вставляю решение здесь. Чтобы другие могли сэкономить свое время.

@PUT() fun uploadDocument( @Url upload_url: Строка, заголовки @HeaderMap: Карта<Строка, Строка>, @Тело запроса: Тело запроса<Строка, Строка>
): Вызов

headerMap.put(«Тип содержимого», «приложение/msword»)

  1. чтение файла:

val InputStream = активы.открыть(«testdoc.docx») // чтение файла из актива

     var size = inputStream.available()

    val buffer = ByteArray(size)
    var bytesRead: Int
    val output = ByteArrayOutputStream()
    while (inputStream.read(buffer).also { bytesRead = it } != -1) {
        output.write(buffer, 0, bytesRead)
    }

    val byteArray = output.toByteArray()
    val requestBody= 
               RequestBody.create(MediaType.parse("application/msword"), byteArray)
 
  1. зовущий:
    JMAServiceInstance.serviceInterfaceForDoc.uploadDocument(
    Utils.upload_Url,карта заголовка,тело запроса)

// Следует помнить : Не используйте @Path, Url-адрес будет зашифрован, и вы получите неверную ошибку запроса. непосредственно используйте @Url внутри функции.