I am trying to upload a file to Amazon S3 using the angular client. I have generated Presigned URL using the NodeJs application server. While uploading a file to presigned URL, but it fails to upload a file from the client, gets (canceled).
I tried to upload file in formats: buffer, base64, formData and raw File
This works if I try uploading with the postman to the generated URL on binary form
Generating Presigned URL using NodeJs
const s3 = new AWS.S3({
accessKeyId: AWS_ACCESS_KEY,
secretAccessKey: AWS_SECRET_ACCESS_KEY,
region: 'eu-central-1',
});
const signedUrlExpireSeconds = 60 * 5;
const presignedS3Url = s3.getSignedUrl('putObject', {
Bucket: process.env.bucket,
Key: './test3Public.pdf',
Expires: signedUrlExpireSeconds,
ACL: 'public-read',
ContentType: 'application/pdf',
});
HTML
<input
type="file"
(change)="onFileSelected($event)"
accept="application/pdf, .docx"
/>
Component.ts
onFileSelected(event: any) {
this.fileToUpload = <File>event.target.files[0];
this.fileUpload
.generatePresignedURL(this.fileToUpload.name)
.pipe(first())
.subscribe(
(data) => {
this.fileUpload
.uploadfileAWSS3(this.fileToUpload, data.presignedS3Url)
.pipe(first())
.subscribe(
(data) => {
console.log('uploaded', data);
},
(error) => {
console.log('error', error);
}
);
},
(error) => {
console.log('error', error);
}
);
}
format that im sending a file:
Angular 11 Service
uploadfileAWSS3(file, fileuploadurl) {
const req = new HttpRequest('PUT', fileuploadurl, file);
return this.http.request(req);
}
Could you help me where is the problem that the upload gets canceled?

