Я пытаюсь сделать 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
Как отправить файл с использованием KTOR-Client в R2 с заголовком «Приложение/октет-поток? ⇐ Android
Форум для тех, кто программирует под Android
1755777570
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"'
Подробнее здесь: [url]https://stackoverflow.com/questions/79742168/how-to-send-a-file-using-ktor-client-to-r2-with-application-octet-stream-heade[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия