Comment partager des fichiers (HTML)

[ Cet article est destiné aux développeurs de Windows 8.x et Windows Phone 8.x qui créent des applications Windows Runtime. Si vous développez une application pour Windows 10, voir la Documentation ]

Les utilisateurs partagent souvent des fichiers avec d’autres personnes ou applications. Avec la fonctionnalité de partage, votre application peut facilement prendre en charge de nombreuses tâches, aussi diverses que l’envoi d’un fichier à un collègue de travail par courrier électronique ou le partage des photos des dernières vacances en famille.

Lorsque vous prenez en charge le partage de fichiers, vous devez prendre en compte le délai dont votre application aura besoin pour préparer les fichiers. Le plus souvent, votre application recevra des fichiers prêts à être partagés. Dans ce cas, il vous suffira de suivre les étapes décrites dans cette rubrique. Si votre application a besoin de préparer davantage les fichiers avant de les partager (par exemple, les convertir en un autre format), nous vous recommandons de consulter la rubrique Comment prendre en charge les opérations Pull. Cette rubrique vous montre comment utiliser une fonction déléguée afin que les applications cibles extraient le contenu partagé à partir de votre application au lieu qu’elles demandent à votre application de leur envoyer le contenu par une opération Push.

Ce que vous devez savoir

Technologies

Prérequis

Instructions

Étape 1: Créer une fonction Gestionnaire de boutons pour permettre à l’utilisateur de choisir un fichier d’image

Le code de gestionnaire de boutons suivant permet à l’utilisateur de sélectionner un fichier d’image. Ce fichier est utilisé dans les dernières étapes de ce démarrage rapide.

Remarque  

Le code suivant utilise pickSingleFileAsync. Sur Windows Phone 8.1, pickSingleFileAndContinue doit être utilisé à la place.

var imageFile = null;
function pickImageFile() {
    var picker = new Windows.Storage.Pickers.FileOpenPicker();
    picker.fileTypeFilter.replaceAll([".jpg", ".bmp", ".gif", ".png"]);
    picker.pickSingleFileAsync().done(function (file) {
        imageFile = file;
    });
}

Étape 2: Configurer votre application en tant que source de partage

L’objet DataTransferManager est le point de départ principal de toute opération de partage. Ajoutez un gestionnaire d’événements DataRequested qui se déclenche quand l’utilisateur souhaite appeler le partage. Dans une application du Windows Store, cela se produit automatiquement quand l’utilisateur appelle l’icône Partager. Si vous développez une application pour Windows Phone, aucune icône Partager n’est intégrée, donc vous devez ajouter un contrôle sur lequel l’utilisateur peut appuyer pour déclencher le gestionnaire.

var dataTransferManager = Windows.ApplicationModel.DataTransfer.DataTransferManager.getForCurrentView();
dataTransferManager.addEventListener("datarequested", shareStorageItemsHandler);

Les étapes restantes servent à implémenter la fonction shareStorageItemsHandler.

Étape 3: obtenir un objet DataRequest

Lorsqu’un événement datarequested survient, votre application reçoit un objet DataRequest. Cet objet contient une classe DataPackage que vous pouvez utiliser pour fournir le contenu qu’un utilisateur souhaite partager.

var request = e.request;

Étape 4: Définir les propriétés de titre et de description

request.data.properties.title = "Share StorageItems Example";
request.data.properties.description = "Demonstrates how to share files.";

Étape 5: Ajouter les fichiers au DataPackage

Pour ajouter les fichiers au DataPackage, utilisez la méthode setStorageItems.

request.data.setStorageItems([imageFile]);

Remarques

Par défaut, setStorageItems fournit des "clones" en lecture seule de storageItems en vue du partage avec des applications cibles. Une fois que vous avez appelé setStorageItems, toute nouvelle propriété définie sur les éléments de stockage individuels ne sera pas reflétée dans les éléments clonés. Vous devez donc vous assurer que vos fichiers sont prêts à être partagés avant de les ajouter au DataPackage.

De plus, si vous voulez que l’application cible soit dotée de fonctionnalités d’accès en lecture/écriture sur la propriété storageItems, utilisez la version surchargée de la méthode setStorageItems qui vous permet de spécifier l’accès en lecture seule ou en lecture/écriture. Par exemple, une application source qui demande à l’application cible d’effectuer une opération de suppression après collage doit spécifier l’accès en lecture/écriture afin que l’application cible puisse supprimer les fichiers sources après les avoir copiés.

Si votre application doit utiliser une opération asynchrone pour préparer l’image ou la miniature, vous devrez utiliser le schéma de report. Nous montrons comment procéder dans Comment effectuer des appels asynchrones dans votre gestionnaire datarequested.

Si votre application met plus de 200 millisecondes à préparer l’image, vous devez utiliser une fonction déléguée pour la partager. La procédure à suivre pour cela est décrite dans la section Comment prendre en charge les opérations Pull. Si vous choisissez d’utiliser une fonction déléguée, vous devez définir la propriété FileTypes pour DataPackage avant de procéder à l’ajout des fichiers.

Terminer l’exemple

Voici un exemple d’une fonction qui définit quelques fichiers à partager pour un utilisateur. Pour obtenir un exemple plus complet, voir l’exemple de notre bibliothèque de code.

var imageFile = null;
function pickImageFile() {
    var picker = new Windows.Storage.Pickers.FileOpenPicker();
    picker.fileTypeFilter.replaceAll([".jpg", ".bmp", ".gif", ".png"]);
    picker.pickSingleFileAsync().done(function (file) {
        imageFile = file;
    });
}

function shareStorageItemsHandler(e) {
    var request = e.request;
    request.data.properties.title = "Share StorageItems Example";
    request.data.properties.description = "Demonstrates how to share files.";
    request.data.setStorageItems([imageFile]);
}

app.onactivated = function (args) {
    if (args.detail.kind === activation.ActivationKind.launch) {
        if (args.detail.previousExecutionState !== activation.ApplicationExecutionState.terminated) {
            // This app is newly launched; register it as a share source.
            var dataTransferManager = Windows.ApplicationModel.DataTransfer.DataTransferManager.getForCurrentView();
            dataTransferManager.addEventListener("datarequested", shareStorageItemsHandler);
            // Setup the button handler to pick image file
            document.getElementById("chooseImageButton").addEventListener("click", pickImageFile, false);
        } else {
            // TODO: This app was reactivated from suspension.
            // Restore the app state here.
        }
        args.setPromise(WinJS.UI.processAll());
    }
};

Rubriques associées

Exemple de partage de contenu source entre applications

Partage et échange de données

Comment partager du contenu HTML

Comment partager un lien

Comment partager du texte

Démarrage rapide : partage de contenu

DataPackage

Windows.ApplicationModel.DataTransfer

Windows.ApplicationModel.DataTransfer.Share