【发布时间】:2022-06-11 09:10:04
【问题描述】:
我正在使用 ipfs 下载文件...但 ipfs 没有文件名或扩展名。
如何根据下载的数据正确设置保存文件的扩展名?
【问题讨论】:
标签: filenames fs file-extension ipfs
我正在使用 ipfs 下载文件...但 ipfs 没有文件名或扩展名。
如何根据下载的数据正确设置保存文件的扩展名?
【问题讨论】:
标签: filenames fs file-extension ipfs
没有办法最终获得 IPFS 中的文件扩展名,因此,您可以查看文件的内容来推断其文件类型(例如使用 file-type)
当您在缓冲区中拥有文件的全部内容时,您可以这样做:
import {fileTypeFromBuffer} from 'file-type';
let buffer = /* buffer of file from IPFS */;
// undefined or string of file extension
let ext = (await fileTypeFromBuffer(buffer))?.ext;
【讨论】:
如果您不想在前端的 React 应用程序中执行此操作,则可以:
let contentType = await fetch(imageUrl)
.then(response => {
return response.blob().then(blob => {
return {
contentType: response.headers.get("Content-Type"),
raw: blob
}
})
})
.then(data => {
return data.contentType
})
file-type 旨在用于Node 应用程序,而不是客户端。
如果您尝试使用为Node 设计的库,那么您将收到与库对内置Node 模块的内部依赖相关的错误,这些模块在浏览器中不可用。您应该使用不同的库从浏览器发出 HTTP 请求;我建议使用浏览器内置的fetch。
【讨论】: