Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查资源';Javascript中的MIME类型是什么?_Javascript_Mime Types - Fatal编程技术网

如何检查资源';Javascript中的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类型有关。这不是我的目标

//在此处插入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的任何内容