Stratégies pour télécharger des fichiers non images dans les mini-programmes WeChat

Lors du développement d'une mini-programme WeChat, il est souvent nécessaire de permettre aux utilisateurs de télécharger des fichiers (hors images) et de les enregistrer. Cependant, les fonctionnalités de téléchargement fournies par WeChat sont limitées et spécifiques à l'environnement de la mini-prorgamme. Voici une synthèse des API impliquées et deux solutions fonctionnelles.

API concernées

1. wx.saveFile()
Cette API permet d'enregistrer un fichier localement, mais elle est obsolète et limitée à 10 Mo. Les fichiers enregistrés ne sont accessibles qu'à l'intérieur de la mini-programme et ne peuvent pas être partagés directement par l'utilisateur.

2. wx.downloadFile()
Elle télécharge une ressource depuis un URL via HTTPS GET et retourne un chemin temporaire local. La taille maximale par téléchargement est de 200 Mo.

3. wx.getFileSystemManager().saveFile()
Cette méthode du gestionnaire de fichiers sauvegarde un fichier temporaire en local. Elle fait partie des API de gestion de fichiers de WeChat, mais ne permet pas un accès direct de l'utilisateur au fichier en dehors de la mini-programme.

En résumé, ces API ne permetent pas un véritable téléchargement accessible à l'utilisateur, car le stockage est isolé par mini-programme et par utilisateur. Les fichiers téléchargés restent dans le cache de WeChat et ne sont pas facilement récupérables par l'utilisateur final.

Solution 1 : Utilisation de l'API de transfert de fichiers

Cette approche utilise wx.shareFileMessage pour envoyer le fichier à un contact après le téléchargement. Le fichier est transféré via le menu de partage de WeChat, ce qui évite les problèmes de stockage local.

Exemple de code réécrit :

// Méthode avec promesse
async function transferFile(downloadUrl) {
  try {
    const fileResponse = await wx.downloadFile({ url: downloadUrl });
    if (fileResponse.statusCode === 200) {
      await wx.shareFileMessage({ filePath: fileResponse.tempFilePath });
    }
  } catch (error) {
    console.error('Échec du téléchargement ou du transfert', error);
  }
}

// Appel de la fonction avec un URL personnalisé
transferFile('https://exemple.com/rapport.pdf');

Cela ouvre l'interface de sélection de conversation WeChat pour envoyer le fichier. Sur Android, spécifiez un chemin avec extension pour éviter les problèmes de reconnaissance de fichier. Utilisez wx.env.USER_DATA_PATH pour définir un chemin personnalisé avec l'extension appropriée.

Solution 2 : Téléchargement suivi d'une prévisualisation avec menu intégré

Cette méthode combine wx.downloadFile et wx.openDocument avec l'option showMenu: true. Après ouverture, un menu apparaît permettant de partager ou d'enregistrer le fichier selon l'appareil.

Exemple de code modifié :

function downloadAndPreview(fileUrl) {
  wx.downloadFile({
    url: fileUrl,
    success: function(response) {
      if (response.statusCode === 200) {
        const localPath = response.tempFilePath;
        wx.openDocument({
          filePath: localPath,
          fileType: 'pdf',
          showMenu: true,
          success: function() {
            console.log('Document ouvert avec succès');
          }
        });
      }
    }
  });
}

// Utilisation avec un fichier exemple
downloadAndPreview('https://exemple.com/guide.pdf');

Sur iOS, le menu permet de partager avec des amis via WeChat. Sur Android, il offre une option pour sauvegarder le fichier. Notez que wx.openDocument ne supporte que certains formats (DOC, XLS, PPT, PDF, etc.) et requiert un chemin temporaire pour iOS.

Les deux solutions exploitent les mécanismes de WeChat pour contourner les limitations de stockage local, offrant des moyens alternatifs de gérer les fichiers téléchargés dans les mini-programmes.

Étiquettes: WeChat Mini Program wx.downloadFile wx.shareFileMessage wx.openDocument JavaScript

Publié le 4 juin à 22h52