快速入门:从存储设备获取图像文件 (HTML)

[ 本文适用于编写 Windows 运行时应用的 Windows 8.x 和 Windows Phone 8.x 开发人员。如果你要针对 Windows 10 进行开发,请参阅 最新文档 ]

本教程介绍如何从可移动存储设备获取图像文件并显示它们。

目标: 与前面的示例中一样,你将枚举便携式存储设备并使用 Windows.Devices.Portable.Storage.FromId 来实例化一个设备,但是在此示例中,你将使用 createFileQueryWithOption 来查找一个图像文件,并使用 getFilesAsync 来检索它。

先决条件

你应该熟悉 JavaScript 和 HTML。

你需要有一个可移动的存储设备。

完成所需时间: 20 分钟.

说明

1. 打开 Microsoft Visual Studio

打开 Visual Studio 的一个实例。

2. 创建一个新项目

在“新建项目”对话框中,从 JavaScript 项目类型中选择一个空白应用程序。

3. 声明可移动存储功能

在解决方案资源管理器中,双击“package.appxmanifest”。选择“功能”选项卡。在“功能”列表中选中“可移动存储”

4. 声明文件类型

  1. 在“声明”选项卡中,从“可用声明”中选择“文件类型声明”****。
  2. 在“属性”****下,将“名称”属性设置为“image”。
  3. 在“支持的文件类型”框中,单击“新增”,通过在“文件类型”字段中输入 .gif 可以将 .gif 作为支持的文件类型加入。
  4. 通过单击“新增”并填写“文件类型”,再添加两种支持的文件类型 .jpg 和 .png。

5. 插入应用程序 HTML 和 JavaScript

打开 Default.html 并将下列代码复制到文件中,替换掉原来的内容。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Get an image file from a removable storage device</title>
    
    <link rel="stylesheet" href="/winjs/css/ui-dark.css" />

    <script type = "text/javascript" >

    Enum = Windows.Devices.Enumeration;

    // Enumerate removable storage devices.
    // The success callback selects the removable storage to use.
    function pickStorageToGetImageFrom() {
        Enum.DeviceInformation.findAllAsync(
        Windows.Devices.Portable.StorageDevice.getDeviceSelector(),
        null).then(
            successCallback,
            errorCallback);
    }

    // Handler that's called when removable storages are found.
    // storageDevices: A collection of type
    // Windows.Devices.Enumeration.DeviceInformationCollection.
    // This example just takes the first storage found in the list.
    function successCallback(storageDevices) {
        var removableStorage = null;
        if (storageDevices.length) {
            try {
                // Create an IStorageItem from the first removable storage device
                removableStorage = Windows.Devices.Portable.StorageDevice.fromId(
                storageDevices.getAt(0).id);
                // document.getElementById("output").innerHTML = storageDevices.getAt(0).name; 
            } catch (e) {
                document.getElementById("output").innerHTML =
                "Error: " + e.message;
            }
            if (removableStorage != null) {
                getImageFiles(removableStorage);
            }
        } else {
            document.getElementById("output").innerHTML =
                "No removable storage devices were found.";
        }
    }

    // Error callback that's called if unable to enumerate all 
    // removable storages
    function errorCallback(e) {
        document.getElementById("output").innerHTML =
            "Error enumerating storages: " + e.message;
    }

    // Find the images on the removable storage and display the first one
    // in the <img> element.
    // storageItem: the item representing the removable storage
    function getImageFiles(removableStorage)
    {
        // Construct the query for image files
        var queryOptions = new Windows.Storage.Search.QueryOptions(
                    Windows.Storage.Search.CommonFileQuery.orderByName,
                    [".jpg", ".png", ".gif"]);
        var imageFileQuery = removableStorage.createFileQueryWithOptions(
            queryOptions);

        // Run the query for image files
        imageFileQuery.getFilesAsync().
                    then(
                        function (items) {
            displayFirstImage(items);
        },
                        function (e) {
            document.getElementById("output").innerHTML =
                "Error when looking for images on the removable storage: "
                + e.message;
        });
    }



    function displayFirstImage(items) {
        var found = false;
        for (var i = 0, l = items.length; i < l && !found; i++) {
            if (items[i].size > 0) { // display the first non-empty file
                displayImage(items[i]);
                found = true;
            }
        }

        if (!found) {
            // No files found matching our criteria
            document.getElementById("output").innerHTML =
                "No image files found on the removable storage.";
        }
    }

    function displayImage(imageFile) {
        document.getElementById("imageNameHolder").innerHTML =
            "Image file name: " + imageFile.name + "<br/>";

        // Setting 2nd parameter to 'false' cleans up the URL 
        // after first use. we set this because we only need 
        // to load the URL into the image tag once.
        document.getElementById("imageHolder").src =
            window.URL.createObjectURL(imageFile, false);
    }
    </script>
</head>
<body>

<div>
     <p>Finds and displays the first available image file
        (.jpg, .png, or .gif) on a removable storage device.</p>
     <button onclick="pickStorageToGetImageFrom()">Get Image File</button>
</div>

<div id="output"></div>
<div id="imageOutput">
     <img id="imageHolder" alt="image holder" src=""/><br />
     <div id="imageNameHolder"></div>
</div>
</body>
</html>

6. 测试应用程序

  1. 如果你的可移动存储设备未连接,请将其插入。
  2. 在“调试”****菜单上,单击“启动调试”测试该解决方案。
  3. 单击“获取图像文件”****按钮,以获取可移动存储设备上的第一个图像文件,并在图像元素中显示它。

注意  如果出错,请检查以下内容:

  • 确保已启用对可移动存储的访问权限,方法是在解决方案资源管理器中打开 package.appxmanifest 并在“功能”****选项卡中选中“可移动存储”。

 

摘要和后续步骤

在此示例中,你通过从 findAllAsync 获取一个设备 ID 并将其传递到 Windows.Devices.Portable.Storage.FromId 来创建了一个存储对象,然后从存储设备访问一个图像。

在 successHandler 函数中,此示例选择了所有枚举存储设备的第一个,但是你可以修改应用,以显示所有可用的可移动存储列表供用户从中选择。

在下一个教程中,你将通过使用自动播放处理程序创建存储对象。

相关主题

快速入门:枚举通用设备

在 Windows Phone 应用中访问 SD 卡