Javascript文件转换为Blob

9
我正在使用 Cordova Media 将音频录制到一个空文件中。
为了上传它,我需要在文件上设置内容类型。
我试图将文件转换为 Blob,以便我可以设置内容类型,然而我很难将文件转换为 Blob。
state.cordova.localDirectory.getFile(filename,{create:true, exclusive:false},
    f => {
      const options = {
        SampleRate: 16000,
        NumberOfChannels: 1,
      }
      media = new window.Media(f.nativeURL,() =>
        f.file(file => {
          const blob = new Blob(file,{type: 'audio/m4u'}) <--  Trying to convert file into a blob here
          blob.lastModifiedDate = new Date()
          blob.name = filename
          console.log(blob)

          upload(blob,'audio/m4u')
            .then(data=> {console.log(data);store.dispatch(voiceAudioUploaded(sessionId,gameTaskId,data))}, err=> console.log(err))
        }
          , err => console.log('err',err) ))
      media.startRecordWithCompression(options)
    })

错误信息为`

构造‘Blob’失败:迭代器获取器不可调用。

`


Blob 需要一个可迭代对象(例如一个数组)。我不知道 file 是什么,但它似乎不是可迭代的。请注意,如果它是 Web API window.File 中的 File,那么它已经是 Blob 了。但是,如果你真的想让它成为一个 Blob,出于某种原因,那么你可以使用 new Blob([file], options) - Kaiido
是的,它是一个 window.File ,用于设置内容类型。 - beek
如果有其他设置内容类型的方法,请告诉我。 - beek
2
这个上传函数为什么需要它呢... 无论如何,不要创建 Blob,而是从该文件创建一个新的 File:file = new File([file], file.name, {type: 'application/foo'}) - Kaiido
谢谢,这是一个好答案。请将其作为答案并标记为正确。 - beek
显示剩余2条评论
1个回答

28
尝试
const blob = new Blob([file],{type: 'audio/m4u'})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接