Я создаю страницу загрузки, которая должна принимать несколько изображений и загружать их в aws s3 с использованием AWS увеличить хранилище.
У меня возникло несколько проблем
Мне нужно закодировать все изображения в формат base64 перед загрузкой.
Это позволяет загружать только одно изображение за раз, поэтому мне нужно oop через массив файлов и загрузить каждый из них в отдельности.
Я не могу получить имя файла, используя file.name
.
Как мне l oop через массив изображения files
закодировать их в base64 и загрузить каждое из них по отдельности?
Приведенный ниже код работает для загрузки одного изображения за раз, но имя файла не определено.
const file = useRef(null);
function handleFileChange(event) {
file.current = btoa(event.target.files);
console.log(event.target.files) ///// length: 7
/// 0: File {name: "921 crest road (19 of 91).jpg", lastModified: 1579836842179, lastModifiedDate: Thu Jan 23 2020 22:34:02 GMT-0500 (Eastern Standard Time), webkitRelativePath: "", size: 13998488, …}
/// 1: File {name: "921 crest road (20 of 91).jpg", lastModified: 1579836859659, lastModifiedDate: Thu Jan 23 2020 22:34:19 GMT-0500 (Eastern Standard Time), webkitRelativePath: "", size: 14433420, …}
/// 2: File {name: "921 crest road (21 of 91).jpg", lastModified: 1579836860868, lastModifiedDate: Thu Jan 23 2020 22:34:20 GMT-0500 (Eastern Standard Time), webkitRelativePath: "", size: 14524865, …}
/// 3: File {name: "921 crest road (22 of 91).jpg", lastModified: 1579836861497, lastModifiedDate: Thu Jan 23 2020 22:34:21 GMT-0500 (Eastern Standard Time), webkitRelativePath: "", size: 13995939, …}
/// 4: File {name: "921 crest road (23 of 91).jpg", lastModified: 1579836884687, lastModifiedDate: Thu Jan 23 2020 22:34:44 GMT-0500 (Eastern Standard Time), webkitRelativePath: "", size: 13982365, …}
/// 5: File {name: "921 crest road (24 of 91).jpg", lastModified: 1579836885360, lastModifiedDate: Thu Jan 23 2020 22:34:45 GMT-0500 (Eastern Standard Time), webkitRelativePath: "", size: 14288288, …}
/// 6: File {name: "921 crest road (25 of 91).jpg", lastModified: 1579836886846, lastMod
console.log(file.current) //// undefined
}
async function handleSubmit(event) {
event.preventDefault();
setShowLoading(true);
try {
console.log(file.name) ///undefined
const filename = `${job.jobId}---${file.name}`;
const stored = await Storage.put(filename, file.current, {
contentType: file.type
});
} catch (e) {
alert(e);
console.log(e.message)
}
setShowLoading(false);
}
var centerText = {textAlign: "center"}
return(
<IonPage>
<IonHeader>
<IonToolbar>
<IonButtons slot="start">
<IonBackButton/>
</IonButtons>
<IonTitle>Upload Images</IonTitle>
</IonToolbar>
</IonHeader>
<IonContent className="ion-padding">
<form onSubmit={handleSubmit}>
<input multiple="true" type="file" onChange={(e) => handleFileChange(e)}></input>
<IonButton expand="block" color="primary" strong="true" size="default" type="submit" >Upload</IonButton>
</form>
</IonContent>
</IonPage>
);
}
export default withRouter(JobInfo);
Обновлен код - все еще не работает!
const file = useRef(null);
function extractInfo(file) {
console.log(file)
return {
name: file.name,
type: file.type,
content: btoa(file.content),
};
}
async function handleFileChange(event) {
file.current = event.target.files;
}
async function handleSubmit(event) {
const result = await Promise.all(
file.current.files
.map(extractInfo)
.map(uploadFile)
);
console.log(file.files)
}
async function uploadFile(file) {
setShowLoading(true);
try {
const filename = `${job.jobId}-${file.name}`;
const stored = await Storage.put(filename, file.current, {
contentType: file.type
});
} catch (e) {
alert(e);
console.log(e.message)
}
setShowLoading(false);
}
var centerText = {textAlign: "center"}
return(
<IonPage>
<IonHeader>
<IonToolbar>
<IonButtons slot="start">
<IonBackButton/>
</IonButtons>
<IonTitle>Upload Images</IonTitle>
</IonToolbar>
</IonHeader>
<IonContent className="ion-padding">
<form onSubmit={handleSubmit}>
<input multiple type="file" ref={file} onChange={(e) => handleFileChange(e)}></input></input>
<IonButton expand="block" color="primary" strong="true" size="default" type="submit" >Upload</IonButton>
</form>
</IonContent>
</IonPage>
);
}
export default withRouter(JobInfo);