I got two files for the image upload to a S3 Bucket with react and aws-sdk.
Component File S3 Uploader:
/* S3Uploader.js */
import AWS from "aws-sdk";
const generateUniqueFileName = (originalFileName) => {
    const uniqueId = Date.now().toString(36);
    return `${uniqueId}_${originalFileName}`;
};
const uploadFileToS3 = async (file, bucket) => {
    const uniqueFileName = generateUniqueFileName(file.name);
    const s3 = new AWS.S3({
        accessKeyId: process.env.REACT_APP_AWS_ACCESS_KEY,
        secretAccessKey: process.env.REACT_APP_AWS_SECRET_ACCESS_KEY,
        region: process.env.REACT_APP_AWS_REGION
    });
    const params = {
        Bucket: bucket,
        Key: uniqueFileName,
        Body: file,
        ContentType: file.type
    };
    return s3.upload(params).promise();
};
export default uploadFileToS3;
I use this in a form for upload Images:
/* S3ImageUploadComponent.js */
import React, {useRef, useState} from "react";
import uploadFileToS3 from "./S3Uploader";
const S3ImageUploadComponent = () => {
    const fileInputRef = useRef(null);
    const [selectedFiles, setSelectedFiles] = useState([]);
    const [previewUrls, setPreviewUrls] = useState([]);
    const handleFileSelection = (event) => {
        const files = Array.from(event.target.files);
        setSelectedFiles(files);
        const urls = files.map((file) => URL.createObjectURL(file));
        setPreviewUrls(urls);
    };
    const handleFileUpload = async () => {
        try {
            const uploadPromises = selectedFiles.map((file) => uploadFileToS3(file, "bucketname"));
            await Promise.all(uploadPromises);
            console.log("Files uploaded successfully.");
            // Perform any necessary actions after successful upload
            setSelectedFiles([]);
            setPreviewUrls([]);
            fileInputRef.current.value = null;
        } catch (error) {
            console.error("Error uploading files:", error);
        }
    };
    const handleClearSelection = () => {
        setSelectedFiles([]);
        setPreviewUrls([]);
        fileInputRef.current.value = null;
    };
    const handleNameChange = (event) => {
        setName(event.target.value);
    };
    return (
        <div>
            <form>
                <div>
                    <label>Files:</label>
                    <input type="file" ref={fileInputRef} onChange={handleFileSelection} multiple />
                </div>
                <div>
                    {previewUrls.map((url, index) => (
                        <img
                            key={index}
                            src={url}
                            alt={`Preview ${index}`}
                            style={{maxWidth: "200px", marginRight: "10px"}}
                        />
                    ))}
                </div>
                <button onClick={handleFileUpload} disabled={selectedFiles.length === 0}>
                    Submit
                </button>
                <button onClick={handleClearSelection} disabled={selectedFiles.length === 0}>
                    Clear
                </button>
            </form>
        </div>
    );
};
export default S3ImageUploadComponent;
The upload only works if I set a breakpoint on
await Promise.all(uploadPromises);
I am sitting on this since hours and I can not explain it.
I tried to upload an Image with aws-sdk to a S3 Bucket. The Component itself works, but if i implement this in another file it is only working with a breakpoint set on the return promise.
