Как отправить файл с использованием KTOR-Client в R2 с заголовком «Приложение/октет-поток?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как отправить файл с использованием KTOR-Client в R2 с заголовком «Приложение/октет-поток?

Сообщение Anonymous »

Я пытаюсь сделать put-request в r2.cloudflareStorage.com , чтобы загрузить файл, подобный этим:
curl --location --request PUT 'https://*.r2.cloudflarestorage.com/***' \
--header 'Content-Type: application/octet-stream' \
--form 'filename=@"smhjrc-kc/file.jpg"'

, который дает мне код 200 .
Использование инструмента C2K Я получил код Kotlin для запроса:

suspend fun uploadR2File(
name: String,
file: File,
contentLength: Long,
) = client.put("https://*.r2.cloudflarestorage.com/***") {
headers.append("Content-Type", "application/octet-stream")

setBody(
MultiPartFormDataContent(
formData {
append("filename", ChannelProvider(size = contentLength) {
file.readChannel()
},
Headers.build {
append(HttpHeaders.ContentType, "application/octet-stream")
append(HttpHeaders.ContentDisposition, "filename=\"$name\"")
})
}
)
)
}

, который дает мне код 403 - signaturedosnotmatch и имеет следующие заголовки:
REQUEST: https://*.r2.cloudflarestorage.com/***
METHOD: PUT
COMMON HEADERS
-> Accept: application/json
-> Accept-Charset: UTF-8
CONTENT HEADERS
-> Content-Length: 19126886
-> Content-Type: multipart/form-data; boundary=16cd895c-1e55f02f-60d59af85134e23b9d86c2-90ea125-552421c01f61772a7de03
BODY Content-Type: multipart/form-data; boundary=16cd895c-1e55f02f-60d59af85134e23b9d86c2-90ea125-552421c01f61772a7de03
BODY START
--16cd895c-1e55f02f-60d59af85134e23b9d86c2-90ea125-552421c01f61772a7de03
Content-Disposition: form-data; name=filename; filename="711c7264-a35f-4cd9-bb6f-b7ca3d0cd451"
Content-Type: application/octet-stream
Content-Length: 19126570


< /code>
, который, кажется, игнорирует строку: < /p>
headers.append("Content-Type", "application/octet-stream")
< /code>
заменить его на: < /p>
Content-Type: multipart/form-data

Вопрос: как заставить Ktor-client добавить 'Content-Type: Application/Octet-Stream' для запроса Multipart/Form-Data?// This returns 200

curl --location --request PUT 'https://*.r2.cloudflarestorage.com/***' \
--header 'Content-Type: application/octet-stream' \
--form 'filename=@"smhjrc-kc/file.jpg"'
< /code>
// This returns 403 SignatureDoesNotMatch

curl --location --request PUT 'https://*.r2.cloudflarestorage.com/***' \
--form 'filename=@"smhjrc-kc/file.jpg"'


Подробнее здесь: https://stackoverflow.com/questions/797 ... ream-heade
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»