Как загрузить изображение в s3 с положенным через предопределенный URL с правильной длины контента? - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь загрузить изображение с 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...