Я делаю прототип приложения Angular8, которое может загружать файлы из формы в MinIO. Вот форма:
upload-form.component.html:
<input class="form-control" type="file" (change)="onFileChanged($event)" required />
<button mat-flat-button color="primary" class="flex__item--middle u-1/3 u-mt+" type="sumbit">
Upload
</button>
Вот ts:
upload-form.component.ts
onFileChanged(event) {
let reader = new FileReader();
if(event.target.files && event.target.files.length) {
const [file] = event.target.files;
this.uploadForm.patchValue({
fileName: file.name,
fileSize: file.size
});
reader.onload = () => {
this.uploadForm.patchValue({
fileStream: reader.result
});
reader.readAsDataURL(file);
};
}
}
// ... here is the service call
// this.uploadService.sendMinIO(form_values).then(...
и вот API-вызов функции MinIO putObject:
minioClient.putObject(bucketName, fileName, fileStream, fileSize, function (err, etag)
.
Служба Angular не актуальна, поскольку онапросто передайте данные без изменений.
С помощью этого метода файл создается и сохраняется, но содержимое является строкой в кодировке base64, которую я получил от FileReader. Я попробовал несколько методов, чтобы получить содержимое файла.
MinIO, ожидание «потока» (Readable Stream) , поэтому я попытался использовать Buffer (новый буфер (строка, «base64»)) .... или streamifier и другие трюки, но я думаю, что здесь есть кое-что базовое, чего я не понимаю.
Что мне нужно сделать, чтобы хранить данные, поступающие из Angularв исходный файл в MinIO?