У меня есть конечная точка, которая загружает файл изображения на сервер, затем на S3.
Когда я запускаю на localhost, размер байта MultipartFile правильный, и загрузка успешна.
Тем не менее, в момент, когда я развернул его на своем экземпляре EC2, размер загруженного файла неверен
Код контроллера
@PostMapping("/{id}/photos")
fun addPhotos(@PathVariable("id") id: Long,
@RequestParam("file") file: MultipartFile,
jwt: AuthenticationJsonWebToken) = ApiResponse.success(propertyBLL.addPhotos(id, file, jwt))
В методе PropertyBLL.addPhotos
печать file.size приводит к неправильному размеру.
Фактический размер файла составляет 649305 байт, однако при загрузке на мой prod-сервер он читается как 1189763 байт.
- Мой рабочий сервер является экземпляром AWS EC2, за Https.
- Файлы yml приложения Spring одинаковы. Единственными конфигурациями, которые я переопределил, были свойства максимального размера файла.
- Я использую PostMan для публикации запроса. Я передаю тело как данные формы, ключ с именем «файл».
- Опять же, он отлично работает при локальном запуске.
Я провел еще один тест, где записал загруженный файл на сервер, чтобы я мог сравнить.
Первые n байтов загруженного файла в редакторе Hex:
EFBFBD50 4E470D0A 1A0A0000 000D4948 44520000 03000000 02400802 000000EF BFBDCC96 01000000 0467414D 410000EF BFBDEFBF BD0BEFBF BD610500 00002063 48524D00 007A2600
Первые n байтов исходного файла:
89504E47 0D0A1A0A 0000000D 49484452 00000300 00000240 08020000 00B5CC96 01000000 0467414D 410000B1 8F0BFC61 05000000 20634852 4D00007A 26000080 840000FA 00000080
Похоже, они оба содержат текст «PNG», а также имеют конечный EXtdate: изменить / создать маркеры.
По запросу, основное содержимое addPhoto:
val metadata = ObjectMetadata()
metadata.contentLength = file.size
metadata.contentType = "image/png"
LOGGER.info("Uploading image of size {} bytes, name: {}", file.size, file.originalFilename)
val request = PutObjectRequest(awsProperties.cdnS3Bucket, imageName, file.inputStream, metadata)
awsSdk.putObject(request)
Это работает, когда я запускаю веб-сервер локально. imageName - это просто пользовательское имя. Существует другой код, включающий модели гибернации, но он не актуален.
Обновление
Это похоже на прокси Https / api. Когда я нажимаю http-адрес узла EC2, он работает нормально. Однако, когда я прохожу через прокси-сервер api (https://api.thedomain.com),, который проксирует узел EC2, происходит сбой. Я продолжу этот путь.