Конвертировать буфер в файл [FileCollection: meteor / ostrio: files] - PullRequest
0 голосов
/ 21 января 2020

когда я получаю изображение из входных данных, мне нужно преобразовать его в буфер, чтобы выполнить некоторые операции с изображением, поэтому в результате вместо файла у меня будет буфер. Я использую FileCollection в метеоре для хранения изображения в mon go collection

uploadIt(e) {
  e.preventDefault();
  var reader = new FileReader();
  var buffer;
  var file = e.currentTarget.files[0];
  if (e.currentTarget.files && e.currentTarget.files[0]) {
    reader.onload = function(e){
      buffer = new Uint8Array(reader.result);
      // some operations over the buffer
  };
  reader.readAsArrayBuffer(file);
  if (file) {
    let uploadInstance = CourseFilesCollection.insert({
      file: buffer,
      ..
      ..
    })
  }
}

, но когда я вставляю, получаю эту ошибку

сообщение: "[FilesCollection] [insert] Вы забыли передать сам файл?

код изначально был

 if (file) {
    let uploadInstance = CourseFilesCollection.insert({
      file: file,
      ..
      ..
    })
  }

, но так как мне приходилось выполнять операции над изображением, мне нужно каким-то образом преобразовать буфер в подать какие-нибудь идеи как это решить?

1 Ответ

0 голосов
/ 22 января 2020

Краткий ответ

используйте конструктор файла , чтобы вернуть биты обратно в контейнер файла:

file: new File([buffer], file.name, file)

вы можете попробовать использовать blob также с расширенной поддержкой браузера ... но если вы хотите использовать новейшие технологии, то:

async uploadIt (evt) {
    evt.preventDefault()
    const file = evt.currentTarget.files[0]
    if (!file) return
    const buffer = new Uint8Array(await file.arrayBuffer())
    // some operations over the buffer

    const uploadInstance = CourseFilesCollection.insert({
        file: new File([buffer], file.name, file)
    })
}
...