使用WinJS,在循环浏览目录时,如何仅检索该特定目录中的图像并忽略任何其他文件扩展名,包括DoubleDots ..
和SingleDot .
等?
类似的东西:
var dir = Windows.Storage.KnownFolders.picturesLibrary;
dir.getFilesAsync().done(function (filesFound) {
for(var i=0; i < filesFound.length; i++){}
if(filesFound[i] IS_REALLY_AN_IMAGE_(jpeg,jpg,png,gif Only)){
//Retrieve it now!
}else{
//Escape it.
}
}})
答案 0 :(得分:2)
使用文件查询可以更好地处理路径名,而不是尝试处理路径名,这样文件系统就可以为您进行搜索/过滤。如果要动态跟踪文件夹内容而不是再次显式枚举,查询还允许您侦听查询的contentschanged事件。
通过StorageFolder.createFileQuery,createFolderQuery或其他变体创建查询。在您希望按文件类型过滤的特定情况下,您可以使用createFileQueryWithOptions。此函数采用QueryOptions对象,您可以使用文件类型数组进行初始化。例如:
var picturesLibrary = Windows.Storage.KnownFolders.picturesLibrary;
var options = new Windows.Storage.Search.QueryOptions(
Windows.Storage.Search.CommonFileQuery.orderByName, [".jpg", ".jpeg", ".png", ".gif"]);
//Could also use orderByDate instead of orderByName
if (picturesLibrary.areQueryOptionsSupported(options)) {
var query = picturesLibrary.createFileQueryWithOptions(options);
showResults(query.getFilesAsync());
}
其中showResults是一个从query.getFilesAsync获取promise的函数,并根据需要进行迭代。
我在免费电子书Programming Windows Store Apps with HTML, CSS, and JavaScript, 2nd Edition的第11章“文件夹和文件夹查询”一节中详细讨论了这个主题。另请参阅Programmatic file search sample,就像我在书中所做的那样。
如果要显示图像文件,请务必使用缩略图而不是加载整个图像(图像通常比显示大得多)。也就是说,对于每个StorageFile
,请调用其getThumbnailAsync
或getScaledImageAsThumbnailAsync
方法。将生成的缩略图 (blob)
传递给URL.createObjectURL
,这会返回URL
,您可以将其分配给img.src attribute
。或者您可以使用WinJS.UI.ListView
控件,但这完全是另一个主题(参见本书第7章)。