是否存在诸如“audio/*”和“video/*”之类的所有音频和视频的 MIME 类型?
Posted
技术标签:
【中文标题】是否存在诸如“audio/*”和“video/*”之类的所有音频和视频的 MIME 类型?【英文标题】:Is there such thing as a MIME type for all audio and video like "audio/*" and "video/*"? 【发布时间】:2016-07-21 19:36:56 【问题描述】:我正在编写一个应用程序,在该应用程序中,通过拖放操作,我只想接受音频和视频类型。
这是 Qt5 中用于放置小部件的代码:
void DragDropFrame::dragEnterEvent(QDragEnterEvent* evt)
if (frame_type == FRAME_TYPE::DROPPABLE)
if (evt->mimeData()->hasFormat("audio/*"))
evt->acceptProposedAction();
else
evt->ignore();
else
evt->ignore();
但“音频/*”不起作用。小部件不接受任何文件。我是否必须“if-else”所有可能的音频和视频 MIME 类型,还是有其他更快的解决方案?
【问题讨论】:
【参考方案1】:不,没有这样的通用 MIME 类型。
evt
会告诉您它拥有的特定 MIME 类型。您可以进行子字符串/模式匹配以查看是否有任何类型与您要查找的内容匹配,例如:
void DragDropFrame::dragEnterEvent(QDragEnterEvent* evt)
if (frame_type == FRAME_TYPE::DROPPABLE)
QStringList formats = evt->mimeData()->formats();
if (!formats.filter("audio/").empty() ||
!formats.filter("video/").empty())
evt->acceptProposedAction();
return;
evt->ignore();
或者:
void DragDropFrame::dragEnterEvent(QDragEnterEvent* evt)
if (frame_type == FRAME_TYPE::DROPPABLE)
QRegExp regex("\\b(audio|video)/*", Qt::CaseInsensitive, QRegExp::Wildcard);
if (!evt->mimeData()->formats().filter(regex).empty())
evt->acceptProposedAction();
return;
evt->ignore();
【讨论】:
【参考方案2】:QMimeData::hasFormat
不处理任何类型的通配符。它只是检查您指定的 mimetype 是否按原样存在于支持的格式列表中(请参阅the implementation)。
您需要获取支持的formats()
列表并在其中搜索以audio/
或video/
开头的任何字符串。
【讨论】:
以上是关于是否存在诸如“audio/*”和“video/*”之类的所有音频和视频的 MIME 类型?的主要内容,如果未能解决你的问题,请参考以下文章
audio元素和video元素在ios和andriod中无法自动播放的情况下,怎么应对?