使用getFilesAsync()检查有效图像

时间:2014-05-20 17:10:59

标签: png jpeg winjs gif getfiles

使用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.
} 
}})

1 个答案:

答案 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,请调用其getThumbnailAsyncgetScaledImageAsThumbnailAsync方法。将生成的缩略图 (blob)传递给URL.createObjectURL,这会返回URL,您可以将其分配给img.src attribute。或者您可以使用WinJS.UI.ListView控件,但这完全是另一个主题(参见本书第7章)。