【问题标题】:Convert buffer to file [FileCollection:meteor/ostrio:files]将缓冲区转换为文件 [FileCollection:meteor/ostrio:files]
【发布时间】:2020-01-21 20:15:41
【问题描述】:

当我从输入中获取图像时 我必须将其转换为缓冲区才能对图像进行一些操作,因此我有一个缓冲区而不是文件。 我在流星中使用 FileCollection 将图像存储在 mongo 集合中

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,
      ..
      ..
    })
  }
}

但是当我插入它时出现了这个错误

message: "[FilesCollection] [insert] 你忘记传递文件本身了吗?

原来的代码是

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

但是由于我必须对图像执行操作,所以我需要以某种方式将缓冲区转换为文件 任何想法如何解决这个问题?

【问题讨论】:

    标签: javascript mongodb image meteor


    【解决方案1】:

    简答

    使用file constructor 将位转回文件容器:

    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)
        })
    }
    

    【讨论】:

      猜你喜欢
      • 2021-01-14
      • 1970-01-01
      • 2022-08-05
      • 2020-04-26
      • 2018-06-29
      • 2023-03-02
      • 1970-01-01
      • 1970-01-01
      • 2019-10-06
      相关资源
      最近更新 更多