Mayron
Mayron
CDCloudflare Developers
Created by Mayron on 6/6/2024 in #general-help
<?xml version="1.0" encoding="UTF-8"?><Error><Code>InvalidRequest</Code><Message>Missing x-amz-conte
Hello, I'm trying to create a pre-signed URL with the S3 API, I followed the Cloudflare doc and my code looked like this:
import { Injectable, Scope } from '@nestjs/common';
import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
import { DeleteFileProps, DownloadFileProps } from './types';
import { GetObjectCommand, DeleteObjectCommand, PutObjectCommand, S3Client } from '@aws-sdk/client-s3';
import { env } from 'src/constants/env';

@Injectable({ scope: Scope.REQUEST})
export class StorageService {
private readonly s3Client: S3Client;
constructor() {
this.s3Client = new S3Client({
region: 'auto',
endpoint: `https://${env.AWS_ACCOUNT_ID}.r2.cloudflarestorage.com`,
credentials: {
accessKeyId: env.AWS_ACCESS_KEY_ID,
secretAccessKey: env.AWS_SECRET_ACCESS_KEY,
}
});
}
async getUploadUrl({ bucket, path }: DownloadFileProps) {
const command = new PutObjectCommand({
Bucket: bucket,
Key: path,
ContentType: 'text/csv',
});
const url = await getSignedUrl(this.s3Client, command, { expiresIn: 60 * 5 });
return url;
}
}
import { Injectable, Scope } from '@nestjs/common';
import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
import { DeleteFileProps, DownloadFileProps } from './types';
import { GetObjectCommand, DeleteObjectCommand, PutObjectCommand, S3Client } from '@aws-sdk/client-s3';
import { env } from 'src/constants/env';

@Injectable({ scope: Scope.REQUEST})
export class StorageService {
private readonly s3Client: S3Client;
constructor() {
this.s3Client = new S3Client({
region: 'auto',
endpoint: `https://${env.AWS_ACCOUNT_ID}.r2.cloudflarestorage.com`,
credentials: {
accessKeyId: env.AWS_ACCESS_KEY_ID,
secretAccessKey: env.AWS_SECRET_ACCESS_KEY,
}
});
}
async getUploadUrl({ bucket, path }: DownloadFileProps) {
const command = new PutObjectCommand({
Bucket: bucket,
Key: path,
ContentType: 'text/csv',
});
const url = await getSignedUrl(this.s3Client, command, { expiresIn: 60 * 5 });
return url;
}
}
The url is generated normally, but when trying to upload the file it gives this error "<?xml version="1.0" encoding="UTF-8"?><Error><Code>InvalidRequest</Code><Message>Missing x-amz-content-sha256</Message></Error>" I'm making the request in Postman, with the PUT method, and the file in the body through the "binary" tab
2 replies