2010-11-22 18 views
0

Je souhaite implémenter une fonctionnalité de pièce jointe pour le courrier électronique, comme l'a fait Gmail, en utilisant jquery + javascript. Donc, j'utilise un fichier de type d'entrée pour sélectionner le fichier - qui donne seulement le nom du fichier, pas le chemin complet du fichier où il se trouve. Je veux le chemin complet du fichier afin que je convertisse le fichier en octets puis envoie une requête ajax au serveur avec des octets de fichier. J'ai utilisé ceci:Comment obtenir le chemin complet du fichier en utilisant le fichier de type d'entrée en javascript?

<input type="file id="fileUpload"> 
var filePath=$('#fileUpload').val(); 

mais le filePath var contient le nom de fichier sélectionné uniquement, pas le chemin complet. Je l'ai cherché sur le net, mais il semble que pour des raisons de sécurité les navigateurs (FF, chrome) donnent juste le nom du fichier.

Merci.

+0

Voulez-vous dire que vous avez besoin de savoir où il habite? –

+0

Votre question concerne le chemin complet du fichier. Mais il me semble que vous voulez réellement télécharger un fichier.Pour cela, vous pouvez google sur JQuery File Upload. – extraneon

+0

oui je veux où le fichier vit côté client –

Répondre

1

Vous n'en avez pas besoin. Crois moi.

Votre meilleur pari, Javaranch: File Upload How-to.

+0

Cela ne résout vraiment rien. Je fais une application basée sur le navigateur hors ligne, et j'ai besoin d'insérer des images dedans - mais il n'y a aucun moyen, puisque je "n'en ai pas besoin" Ne prêchez pas la stupidité, veuillez – TheMorfeus

0

C'est impossible. Si cela était possible, je pourrais accéder à n'importe quel fichier sur votre disque dur en manipulant votre champ de téléchargement. Pourquoi en auriez-vous besoin, de toute façon?

+0

je veux attched le fichier pour l'email –

+0

@Sonal Patil: Envoyez-vous des emails côté client? Sinon, vous devrez quand même télécharger ce fichier (qui ne nécessite pas de chemin d'accès complet). – jwueller

0

Comme vous l'avez déjà noté, de nombreux navigateurs ne vous permettent simplement pas de le faire. C'est 1) une bonne chose (sécurité et autres joyeusetés), 2) la bonne réponse (il n'y a aucun moyen de les forcer à donner le chemin complet, à court d'exploit). Je suis désolé que vous ne l'aimez pas, mais il est peu probable que la réponse soit différente. Sur une note plus positive, il peut être possible d'utiliser une applet Flash ou Java pour accéder aux fichiers locaux (par exemple, Uploadify), mais l'utilisateur doit alors autoriser son élévation de privilèges.

Editer: J'ai vérifié ce que GMail fait, et vous voulez probablement quelque chose de complètement différent de votre question: il utilise un iframe habilement déguisé (pas de frontières, même arrière-plan, ressemble à une partie de la page), qui contient une petite forme téléchargement de fichiers. Simplifié:

<form id="main_mail_form"> 
    <input type="hidden" name="compose_mail_identifier" value="id_beef-cafe"> 
    <!-- buttons and previous form fields - subject, to, cc --> 
    <iframe src="attachments?for_message=id_beef-cafe"> 
    <!-- note that we're passing  ^^^^^^^^^^^^ the same identifier here --> 
    </iframe> 
    <!-- other form fields and buttons --> 
</form> 

A l'intérieur du iframe:

<form id="attachment_mail_form"> 
    <input type="hidden" name="compose_mail_identifier" value="id_beef-cafe"> 
    <!-- ^^ note that this has the same value as the main form --> 
    <input type="file"> 
    <!-- other form elements --> 
</form> 

Lorsque vous ajoutez une pièce jointe au courrier, vous ne soumettez le formulaire dans le iframe. Google semble faire correspondre les pièces jointes avec les e-mails en utilisant un identifiant unique par message (nommé compose_mail_identifier dans l'exemple). De cette façon, les pièces jointes et le message sont traités par des formulaires différents, et seulement fusionnés dans un e-mail lorsque vous cliquez sur "Envoyer".

0

Vous ne serez pas en mesure d'accéder au fichier d'une manière telle qu'il enfreint les règles de sécurité de base que votre navigateur applique. Une astuce que j'aime utiliser est de créer un iframe sans frontières qui héberge un formulaire de téléchargement. Vous devriez alors pouvoir télécharger le fichier et le renvoyer à la fenêtre parente avec le nom du fichier et une sorte d'identifiant si vous décidez d'insérer un enregistrement de la pièce jointe dans une base de données. J'utilise l'iframe parce qu'il imite le type de comportement "AJAX" que vous aimeriez atteindre dans les applications Web modernes. J'ai créé une solution de pièces jointes similaires il y a quelques jours. Ce n'est pas aussi simple que vous le voudriez, alors oui, la réponse courte est que vous allez devoir y consacrer un peu plus de travail et de réflexion.