Я пытаюсь загрузить изображение с Angular HttpClient в S3 корзину с PUT через предопределенный URL.Сам файл создается в корзине, но его Content-Length всегда равен 0.
Предопределенный URL-адрес создается на стороне сервера через AWS Java SDK v2.
Я попытался установить Content-Длина вручную, как
headers: new HttpHeaders({'Content-Type': file.type, 'Access-Control-Expose-Headers': 'Content-Disposition', 'Content-Length': `${file.size}`})
, но безуспешно.
Я также проверил документацию AWS https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html
Метод, который генерирует предопределенный URL:
fun getUploadUri(key: String, bucket: String): URI {
val request = SdkHttpFullRequest.builder()
.encodedPath("/$key")
.host("$bucket.s3.${awsProperties.region}.amazonaws.com")
.protocol("https")
.method(SdkHttpMethod.PUT)
.build()
return AwsS3V4Signer.create().presign(request, params).uri
}
Функция, которая вызывает на стороне клиента:
private save(presignedUri: string, file: File): Observable<string> {
return this.http.put(presignedUri, new FormData().append('file', file, file.name), {
reportProgress: true,
responseType: 'text',
headers: new HttpHeaders({'Content-Type': file.type, 'Access-Control-Expose-Headers': 'Content-Disposition', 'Content-Length': `${file.size}`})
});
}
С этим кодом файл создается в S3, но его Content-Length всегда равен 0.