Сохраните файл в MinIO из формы браузера (Angular2) - PullRequest
0 голосов
/ 17 октября 2019

Я делаю прототип приложения 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?

...