Краткое руководство: доступ к содержимому домашней группы (HTML)

[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]

Доступ к содержимому в папке домашней группы пользователя, включая изображения, музыку и видео.

Необходимые условия

  • Понятие об асинхронном программировании для приложений среды выполнения Windows на JavaScript

    Сведения о создании асинхронных приложений см. в статье Краткое руководство: использование объектов Promise в языке JavaScript.

  • Объявление характеристик приложений

    Для получения доступа к содержимому домашней группы на компьютере пользователя должна быть настройка "Домашняя группа", а ваше приложение должно иметь по крайней мере одну из следующих характеристик: библиотеку изображений, фонотеку или видеотеку. Получив доступ к папке домашней группы, ваше приложение будет видеть только те библиотеки, которые соответствуют характеристикам, объявленным в манифесте приложения. Подробнее об этих характеристиках см. в разделе Объявление характеристик приложения.

    Примечание  Содержимое папки документов домашней группы невидимо для вашего приложения независимо от возможностей, объявленных в манифесте, и настроек общего доступа пользователя.

     

  • Использование средств выбора файлов

    Обычно средство выбора файлов используется для доступа к файлам и папкам в домашней группе. Дополнительные сведения об использовании средства выбора файлов см. в разделе Краткое руководство: доступ к файлам с помощью средств выбора файлов.

  • Запросы файлов и папок

    Вы можете использовать запросы для перечисления файлов и папок в домашней группе. Для получения подробностей о запросах файлов и папок см. Краткое руководство: программный доступ к файлам.

Откройте средство выбора файлов в домашней группе.

Выполните следующие действия, чтобы открыть экземпляр средства выбора файлов, который позволяет пользователю выбирать файлы и папки из домашней группы:

  1. Создание и настройка средства выбора файлов

    Используйте fileOpenPicker, чтобы создать средство выбора файлов, и задайте для его свойства SuggestedStartLocation значение PickerLocationId.homeGroup. Также задайте другие свойства, актуальные для ваших пользователей и приложения. Указания по настройке средства выбора файлов см. в разделе Руководство и контрольный список для средств выбора файлов.

    Этот пример создает средство выбора файлов, которое открывает файлы любого типа в домашней папке и отображает их в виде эскизов.

    var picker = new Windows.Storage.Pickers.FileOpenPicker();
    picker.suggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.homeGroup;
    picker.fileTypeFilter.replaceAll(["*"]);
    picker.viewMode = Windows.Storage.Pickers.PickerViewMode.thumbnail;
    
  2. Показ средства выбора файлов

    После создания и настройки средства выбора файлов пользователь может выбрать один файл, вызвав fileOpenPicker.pickSingleFileAsync. Можно также выбрать несколько файлов, вызвав fileOpenPicker.pickMultipleFilesAsync.

    Этот пример демонстрирует, как отобразить средство выбора файлов, чтобы позволить пользователю выбрать один файл, и как захватить выбранный файл для обработки.

    picker.pickSingleFileAsync().then(function (file) {
        if (file) {
            // The app now has read/write access to the picked file.
            WinJS.log && WinJS.log("1 file selected: \"" + file.path + "\"", 
                "sample", "status");
    
            // If the returned file was an image, show it to the user.
            if ((".JPG" === file.fileType) || (".jpg" === file.fileType) || 
                (".JPEG" === file.fileType) || (".jpeg" === file.fileType) || 
                (".PNG" === file.fileType) || (".png" === file.fileType) || 
                (".BMP" === file.fileType) || (".bmp" === file.fileType)) {
                    document.getElementById("returnedImage").src = 
                        URL.createObjectURL(file, { oneTimeOnly: true });
                    document.getElementById("returnedImage").style.visibility = "visible";
            } else {
                // The returned file wasn't an image, so hide the container where it 
                // would have appeared.
                document.getElementById("returnedImage").style.visibility = "hidden";
            }
        }
    },
    
    function (file) {
        // An error occurred.
        WinJS.log && WinJS.log("File was not returned", "sample", "error");
    });
    

Поиск файлов в домашней группе

В этом разделе описано, как найти элементы в домашней группе, соответствующие термину запроса пользователя.

  1. Получите термин запроса от пользователя.

    Вот термин запроса, который пользователь ввел в поле ввода:

    var query = document.getElementById("queryString").value;
    
  2. Задайте параметры запроса и фильтр поиска.

    Параметры запроса определяют порядок сортировки результатов поиска, а фильтр поиска определяет, какие элементы необходимо включить в результаты поиска.

    Этот пример задает параметры запроса, которые сортируют результаты поиска по релевантности, а затем по дате изменения. Фильтр поиска — это термин запроса, который пользователь ввел на предыдущем этапе:

    var options = new Windows.Storage.Search.QueryOptions(
        Windows.Storage.Search.CommonFileQuery.orderBySearchRank, ["*"]);
    options.userSearchFilter = query;
    
    • Выполните запрос и обработайте результаты.

      Следующий пример запускает запрос поиска и сохраняет имена всех соответствующих файлов в виде списка строк.

      try {
          var queryResult = 
              Windows.Storage.KnownFolders.homeGroup.createFileQueryWithOptions(options);
      
          queryResult.getFilesAsync().then(function (files) {
              // If no matching files were found, show appropriate output and turn 
              // off the progress ring.
              if (files.size === 0) {
                  WinJS.log && WinJS.log("No files found for \"" + query + "\"", 
                      "sample", "status");
                  document.getElementById("searchProgress").style.visibility = "hidden";
              }
      
              // We found matching files. Show them and turn off the progress ring.
              else {
                  var outputString = (files.size === 1) ? 
                      (files.size + " file found\n") : (files.size + " files found\n");
                  files.forEach(function (file) {
                      outputString = outputString.concat(file.name, "\n");
                  });
                  WinJS.log && WinJS.log(outputString, "sample", "status");
                  document.getElementById("searchProgress").style.visibility = "hidden";
              }
          });
      }
      catch (e) {
          // An error occurred. Show and log the error.
          document.getElementById("searchProgress").style.visibility = "hidden";
          WinJS.log && WinJS.log(e.message, "sample", "error");
      }
      

Поиск общих файлов определенного пользователя в домашней группе

В этом разделе показано, как найти файлы домашней группы, предоставленные конкретным пользователем.

  1. Получите коллекцию пользователей домашней группы.

    Каждая из папок первого уровня в домашней группе представляет отдельного пользователя домашней группы. Поэтому, чтобы получить коллекцию пользователей домашней группы, вызовите GetFoldersAsync и получите папки домашней группы верхнего уровня, а затем просмотрите полученные папки, чтобы найти конкретного пользователя.

    
    var hg = Windows.Storage.KnownFolders.homeGroup;
    hg.getFoldersAsync().then(function (users) {
        users.forEach(function (user) {
    
        // TODO: Do something with the user name. 
    
        });
    }
    
  2. Создайте запрос файла и ограничьте область конкретным пользователем.

    Этот пример задает параметры запроса, которые сортируют результаты поиска по релевантности, а затем по дате изменения. Параметры запроса затем применяются к поисковому запросу, который ограничен конкретным пользователем.

    var options = new Windows.Storage.Search.QueryOptions(
        Windows.Storage.Search.CommonFileQuery.orderBySearchRank, ["*"]);
    var query = user.createFileQueryWithOptions(options);
    
  3. Выполните запрос и обработайте полученный файл.

    Следующий пример запускает запрос поиска и сохраняет имена всех файлов соответствующего пользователя в виде списка строк.

    query.getFilesAsync().then(function (files) {
    
        // If we don't find any shared files for the specified user, 
        // hide the progress indicator and notify the user. 
        if (files.size === 0) {
            document.getElementById("searchProgress").style.visibility = "hidden";
    
            // In the following line, userToSearch is a name specified by
            // the app user.
            outputString = "No files shared by " + userToSearch + ""; 
        }
    
        // We found shared files for this user. Hide the progress indicator
        // and process the files.  
        else {
            document.getElementById("searchProgress").style.visibility = "hidden";
            outputString = (files.size === 1) ? 
                (files.size + " file found\n") : (files.size + " files shared by ");
            outputString = outputString.concat(userToSearch, "\n");
            files.forEach(function (file) {
                outputString = outputString.concat(file.name, "\n");
            });
        }
    });
    

Потоковое видео из домашней группы

Выполните следующие шаги, чтобы воспроизводить потоковое видеосодержимое из домашней группы.

  1. Включите видеоэлемент в HTML-страницу приложения.

    Элемент video определяет, какое видеосодержимое будет проигрываться в вашем приложении.

    <div data-win-control="SdkSample.ScenarioOutput">
        <video id="player" height="338" width="600" controls style="visibility: hidden">Unable to play video file</video>
    </div>
    
  2. Откройте средство выбора файлов в домашней группе и примените фильтр, который включает видеофайлы в форматах, поддерживаемых вашим приложением.

    Этот пример включает MP4- и WMV-файлы в средство выбора файлов в окне открытия.

    var picker = new Windows.Storage.Pickers.FileOpenPicker();
    picker.viewMode = Windows.Storage.Pickers.PickerViewMode.thumbnail;
    picker.suggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.homeGroup;
    picker.fileTypeFilter.replaceAll([".mp4", ".wmv"]);
    
  3. Преобразуйте выбор файла пользователя в URL-адрес и установите этот адрес в качестве источника видеоэлемента.

    Следующий пример загружает видеоэлемент и инициализирует его в приостановленном невидимом состоянии. После того как пользователь выберет видеофайл, пример загружает URL-адрес файла, устанавливает его в качестве источника элемента video, отображает видеоэлемент и начинает воспроизведение видео.

    var vidPlayer = document.getElementById("player");
    vidPlayer.style.visibility = "hidden";
    vidPlayer.pause();
    picker.pickSingleFileAsync().then(function (file) {
        if (file) {
            // The video tag has built in capabilities to stream the video over 
            // the network.
            vidPlayer.src = URL.createObjectURL(file, { oneTimeOnly: true });
            vidPlayer.style.visibility = "visible";
            vidPlayer.play();
        }
    },
    function (file) {
        WinJS.log && WinJS.log("File was not returned", "sample", "error");
    });
    

Сводка

Теперь вы знаете, как получить доступ к содержимому в домашней группе.

Связанные разделы

Образец приложения домашней группы

Доступ к данным и файлам

Краткое руководство: доступ к файлам с помощью средства выбора файлов

Краткое руководство: программный доступ к файлам

Домашняя страница примеров приложений

Ссылки

Windows.Storage.KnownFolders class