Установить угловой HTTP заголовок с перехватчиком, чтобы соответствовать s3 подписанный URL

Я пытаюсь использовать подписанный URL-адрес S3, полученный с помощью лямбды, для отправки HTTP PUT для сохранения изображения на S3. Поток такой:

http-запрос для подписанного URL-адреса> лямбда-возвращение подписанного URL-адреса>http-запрос для размещения изображения на S3 с подписанным URL-адресом

Но запрос продолжает отправляться с заголовком text/plain. Это мой код перехватчика. Кажется, он устанавливает параметры запроса, а не заголовок.

@Injectable()
export class AuthInterceptor implements HttpInterceptor {

    constructor(private authService: AuthService) {}
 
    intercept (req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

        return this.authService.getAuthenticatedUser().getSession((err, session) => {
            if (err) {
                console.log("Error getSession")
                return next.handle(req);
            }

            let authReq = null;
            
            if (req.url.indexOf('X-Amz-Algorithm') === -1) {
           
                authReq = req.clone({
                    headers: req.headers.set('Authorization', session.getIdToken().getJwtToken())
                });
            } else {
                authReq = req.clone({
                    setHeaders: {'ContentType': 'image/jpeg'}
                });
                authReq = req;
            }
            
            return next.handle(authReq);
        })
    }
}

И лямбда, которую я использовал для возврата подписанного URL-адреса:

var AWS = require('aws-sdk');

var s3 = new AWS.S3({
  signatureVersion: 'v4',
});

exports.handler = (event, context, callback) => {
  const url = s3.getSignedUrl('putObject', {
    Bucket: 'bucket_name',
    Key: 'image' + '.jpg',
    Expires: 20,
    //ContentEncoding: 'base64',  ??
    ContentType: 'image/jpeg',
  });

  callback(null, url);
};

Не могли бы вы дать мне знать, как правильно установить заголовок запроса, чтобы он не был текстовым, а должен быть image/jpeg?

Кроме того, я отправляю изображение в кодировке base64, поэтому не уверен, нужно ли отправлять ContentEncoding в заголовке. Если я помещу его в лямбду, я получаю сообщение об ошибке: SignatureDoesNotMatch с предварительно заданным URL-адресом. Спасибо за помощь!

0 ответов