javascript 如何获取数组缓冲区对象的mime类型?

xt0899hw  于 2023-02-15  发布在  Java
关注(0)|答案(2)|浏览(233)

我正在处理一个API,它是以arraybuffer类型获取文件数据的。我的主要问题是,如果我需要将arraybuffer转换为BLOB来查看文件,则需要知道arraybuffer文件的MIME类型。

var file1 = new Blob([response], { type: file.type });
var fileURL = URL.createObjectURL(file1);

在上面的代码片段中,response是一个arraybuffer,我得到的mime类型是在上传时存储在一个变量中的,但是现在的情况是我手中没有任何mime类型,所以我需要一种方法来得到它。
这是我的回应标头:

这是我的身体样本

有谁能给我点建议吗?

xqnpmsa8

xqnpmsa81#

我发现下面这个包非常有趣。它解析数组缓冲区/blob/流,并尝试猜测它的扩展名和mime类型,如果它是一个文件。显然它不是详尽的,但你可以在自述文件中找到扩展名列表。工作在节点和浏览器。工作为我的需要,虽然。
下面是回购链接:https://github.com/sindresorhus/file-type

vjhs03f7

vjhs03f72#

file-type的替代方案,似乎也使用了魔术签名:

function getMimeTypeFromArrayBuffer(arrayBuffer) {
  const uint8arr = new Uint8Array(arrayBuffer)

  const len = 4
  if (uint8arr.length >= len) {
    let signatureArr = new Array(len)
    for (let i = 0; i < len; i++)
      signatureArr[i] = (new Uint8Array(arrayBuffer))[i].toString(16)
    const signature = signatureArr.join('').toUpperCase()

    switch (signature) {
      case '89504E47':
        return 'image/png'
      case '47494638':
        return 'image/gif'
      case '25504446':
        return 'application/pdf'
      case 'FFD8FFDB':
      case 'FFD8FFE0':
        return 'image/jpeg'
      case '504B0304':
        return 'application/zip'
      default:
        return null
    }
  }
  return null
}

灵感源自https://medium.com/the-everyday-developer/detect-file-mime-type-using-magic-numbers-and-javascript-16bc513d4e1e

相关问题