Des solutions pour permettre l'accès au fichier intranet / local dans une application HTML5?

Je suis tout à fait conscient du fait que même avec le nouveau FileAPI, il n'est pas possible d'accéder au chemin d'accès local d'un fichier ajouté à l'aide d'un champ de saisie de fichier ou de glisser-déplacer. Qu'il s'agisse ou non, c'est mauvais ou moche, ce n'est pas le problème ici. Selon les spécifications FileAPI, l'accès au fichier local ne doit pas être implémenté, et je ne supprime pas le souffle.

Mais prévoyons simplement que je suis dans une situation avec les paramètres fixes suivants:

  • Développer une application HTML5 uniquement pour être utilisé en interne chez une entreprise
  • .NET utilisé pour le backend (nécessaire en interop avec les API)
  • Peut spécifier / contrôler exactement quel navigateur et toute version doivent être utilisés avec l'application
  • Besoin d'accéder aux fichiers qui se trouvent généralement sur un partage de réseau, mais peut-être aussi localement sur le poste de travail d'un utilisateur

Et par l'accès, je ne veux pas dire les données du fichier d'accès, mais plutôt être capable de relayer un événement de glisser-déposer / sélectionner de fichier dans une autre API en alimentant le chemin d'accès local du fichier tiers afin que le tiers Le fichier et faire une sorte de travail sur celui-ci. Cela peut être assimilé à l'utilisation d'un champ [type = file] d'entrée comme vous le feriez dans OpenFileDialog dans .NET – c'est-à-dire qu'il s'agit d'alimenter l'application dans un chemin de fichier, pas un fichier réel .

Je me rends compte que ce n'est probablement pas possible. Mais je pense aussi qu'il doit y avoir une sorte de solution au problème.

Quelques idées avec lesquelles j'ai été impliqué sont:

  • Utilisation de méthodes spécifiques au navigateur pour permettre aux "fonctionnalités sécurisées"
    • Pas sure si possible – fatigué en utilisant certaines de ces fonctionnalités en vain
    • Limiter l'application à une version spécifique d'un navigateur car la fonctionnalité pourrait éventuellement être supprimée à l'avenir
    • Quelque chose comme une extension Chrome pourrait éventuellement faire l'affaire
  • Utilisation d'une sorte d'application complémentaire installée localement sur un ordinateur client qui prend en charge toute la gestion des fichiers sur le disque, éventuellement en communication avec le client HTML5 à l'aide de websockets ou similaires.
    • Une solution potentiellement désordonnée
    • Probablement confondrait un peu les utilisateurs au début
  • Soumettre les données de fichier sélectionnées au serveur, le stocker sur un chemin spécifique et envoyer ce nouveau chemin vers le tiers.
    • Constituerait beaucoup d'envoi de fichiers sur le réseau de l'entreprise, environ 100 000 Mo de taille
    • Ne serait pas capable de faire des modifications sur place à un fichier qu'un utilisateur a sélectionné

… et c'est à propos de ça.

Des suggestions snazzy? Des mots sages? Liens utiles? Des commentaires Snarky?

Merci.

Edit: Pour tout curieux, il était très simple d'utiliser Silverlight selon la suggestion de jgauffin ci-dessous.

À partir du code Silverlight (utilisant des privilèges élevés):

private void fileBtn_Click(object sender, RoutedEventArgs e) { //prompt file select dialog in Silverlight: var dlg = new OpenFileDialog(); dlg.ShowDialog(); //call JavaScript method and feed it the file path: HtmlPage.Window.Invoke("onFileSelected", dlg.File.FullName); } 

Vous devrez probablement utiliser quelque chose qui fonctionne dans le navigateur comme flash ou silverlight.

Puisqu'il s'agit d'une application interne, j'utiliserai silverlight car tout le reste est dans .NET. Il ne devrait pas être nécessaire de faire en sorte que le fichier accède à une partie dans le plugin.

Voici un article sur l'accès aux fichiers locaux: http://www.wintellect.com/CS/blogs/jprosise/archive/2009/12/16/silverlight-4-s-new-local-file-system-support.aspx .

Le serveur hébergeant le site a-t-il accès au réseau de PC?

Vous pouvez simplement énumérer tous les fichiers de cette façon … construire un petit script ajax comme une boîte de dialogue de fichier qui aura php ou quoi que ce soit renvoyant la structure

Aucun plugin nécessaire, fonctionne sur tous les navigateurs … 🙂