如何检查资源';Javascript中的MIME类型是什么?
我试图创建一个函数来检查用户提供的资源,看看它是否是有效的音频文件 我在这里找到的所有内容都与上传文件后检查文件MIME类型有关。这不是我的目标如何检查资源';Javascript中的MIME类型是什么?,javascript,mime-types,Javascript,Mime Types,我试图创建一个函数来检查用户提供的资源,看看它是否是有效的音频文件 我在这里找到的所有内容都与上传文件后检查文件MIME类型有关。这不是我的目标 //在此处插入MIME类型检查函数 const urlParams=新的URLSearchParams(window.location.search); const audioURL=urlparms('audioURL')//从查询中获取audioURL(example.com/?audioURL=https://example.com/audio.
//在此处插入MIME类型检查函数
const urlParams=新的URLSearchParams(window.location.search);
const audioURL=urlparms('audioURL')//从查询中获取audioURL(example.com/?audioURL=https://example.com/audio.wav)
if(mimetypecheck()){//函数在此处检查mime类型
var audio=新音频(audioURL);
音频播放();
}否则{
//告诉用户无效的音频url或不支持的音频类型
}
正如评论中所说,检查资源是否指向某些可播放媒体的唯一方法是实际尝试播放它
MIME类型不会告诉你太多,而且对于音频/视频媒体:您无法100%确定容器(由MIME类型声明)真正包含的内容,它很可能被编码到浏览器无法解码的编解码器中,即使它包装在浏览器应该知道的容器中 这意味着,即使一个简单的HEAD请求可以告诉您服务器将在Content-Type头中发送哪些URL,也不能确切地告诉您浏览器是否能够播放它。考虑到大多数服务器无论如何都不允许您读取这些头文件,这不值得尝试实现它的成本 对于你的情况,最好的办法就是试着去做 因此,您可以将代码重写为
const urlparms=新的URLSearchParams(window.location.search);
const audioURL=urlparms('audioURL')//从查询中获取audioURL(example.com/?audioURL=https://example.com/audio.wav)
const audio=新音频(audioURL);
audio.onerror=(evt)=>{
//告诉用户无效的音频url或不支持的音频类型
};
音频播放();
请注意,我们也可以绑定到htmlmediaement.play()
方法返回的Promise的catch()
方法,但它实际上可能是由于其他原因触发的(例如,如果用户以前从未在Chrome中与页面交互,或者如果此代码不是对Safari中的用户手势的直接响应)。如果您确定只有无效的URL可能是播放失败的原因,那么您可以这样做
const audio = new Audio(audioURL);
audio.play().catch( () => {
//tell user invalid audio url, or unsupported audio type
});
正如评论中所说,检查资源是否指向某些可播放媒体的唯一方法是实际尝试播放它 MIME类型不会告诉你太多,而且对于音频/视频媒体:
您无法100%确定容器(由MIME类型声明)真正包含的内容,它很可能被编码到浏览器无法解码的编解码器中,即使它包装在浏览器应该知道的容器中 这意味着,即使一个简单的HEAD请求可以告诉您服务器将在Content-Type头中发送哪些URL,也不能确切地告诉您浏览器是否能够播放它。考虑到大多数服务器无论如何都不允许您读取这些头文件,这不值得尝试实现它的成本 对于你的情况,最好的办法就是试着去做 因此,您可以将代码重写为
const urlparms=新的URLSearchParams(window.location.search);
const audioURL=urlparms('audioURL')//从查询中获取audioURL(example.com/?audioURL=https://example.com/audio.wav)
const audio=新音频(audioURL);
audio.onerror=(evt)=>{
//告诉用户无效的音频url或不支持的音频类型
};
音频播放();
请注意,我们也可以绑定到htmlmediaement.play()
方法返回的Promise的catch()
方法,但它实际上可能是由于其他原因触发的(例如,如果用户以前从未在Chrome中与页面交互,或者如果此代码不是对Safari中的用户手势的直接响应)。如果您确定只有无效的URL可能是播放失败的原因,那么您可以这样做
const audio = new Audio(audioURL);
audio.play().catch( () => {
//tell user invalid audio url, or unsupported audio type
});
请查看此库,如果不下载文件,则无法检查类型,因此您不妨检查音频是否开始播放。特别是因为检查MIME类型并不完全可靠。@GuyEnognito从理论上讲,您可以使用HEAD请求。在这里的示例中,“音频URL”似乎来自同一个域,与此脚本所运行的域相同。是不是总是这样?如果没有,那么您可能会忘记使用客户端JavaScript实现此功能—您的用户可能在此处输入的大多数“野外”任意url可能不会启用CORS。示例音频url应该是用户输入的内容。他们输入的url可以是@cbroe的任何内容。请查看此库。如果不下载文件,您无法检查类型,因此您不妨检查音频是否开始播放。特别是因为检查MIME类型并不完全可靠。@GuyEnognito从理论上讲,您可以使用HEAD请求。在这里的示例中,“音频URL”似乎来自同一个域,与此脚本所运行的域相同。是不是总是这样?如果没有,那么您可能会忘记使用客户端JavaScript实现此功能—您的用户可能在此处输入的大多数“野外”任意url可能不会启用CORS。示例音频url应该是用户输入的内容。他们输入的url可以是@CBroe的任何内容