2008-10-07 7 views
1

Ceci est un peu étrange ... Nous avons une application Web interne qui s'exécute sur le serveur (A) et un référentiel de documents qui s'exécute sur le serveur (B).Téléchargement externe de document à partir du serveur interne

J'ai un lien simple sur une page et je veux permettre à l'utilisateur de télécharger un document (A partir du serveur IIS (A)). Cependant, ce document n'existe pas sur le serveur (A) jusqu'à ce que l'utilisateur clique sur le bouton (car plus de 40 documents à afficher ne peuvent pas tous les charger lorsque la page est chargée)

Lorsque l'utilisateur clique sur le lien (à quel point I souhaite alors être invité à télécharger) Le document est copié sur le serveur (A), puis redirigé vers une page où le navigateur les invite à télécharger. Je crois que j'ai configuré l'en-tête de contenu correctement et cela fonctionne dans FireFox.

IE (7) ouvre simplement une fenêtre, puis la fenêtre disparaît, Si je baisse les paramètres de sécurité cela fonctionne bien mais ce n'est pas une option.

Toutes les idées pour résoudre ce problème. Je ne peux pas pointer directement vers le document sur le serveur (B)

AJOUT: Oui Serveur B est également un serveur Web

Répondre

5

Si le monde peut voir le serveur A et le serveur A peut voir le serveur B. Je recommande de configurer un proxy inverse.

http://www.codeplex.com/urlrewriter

Fondamentalement, ce que cela ne se permet au monde de télécharger depuis un serveur B mais uniquement via le proxy inverse. Vous pouvez créer une interface de proxy inverse avec cette bibliothèque ci-dessus avec la règle suivante.

RewriteRule ^/download/(.*) http://server-b/download/ $ 1 [NC, P]

Ainsi, dans le cas de

http://server-a/download/xyz.pdf

qu'il demanderait réellement de

http://server-b/download/xyz.pdf

mais il serait livré comme si elle venait du serveur-a, cela se produit techniquement par le proxy inverse en créant une connexion web, du serveur-a, au serveur-b et en copiant la réponse HTTP à la réponse du serveur-a.

Faites-moi savoir si vous avez besoin d'aide.

+0

J'écrivais la même solution quand la tienne est apparue :-). Je veux juste signaler une mise en garde, le serveur B a besoin d'un serveur Web pour que cela fonctionne. –

+0

Très vrai, je suppose que j'ai fait cette supposition, mais c'est généralement assez facile à obtenir. Si ce n'est pas un serveur, il suffit d'utiliser un lecteur réseau pour fournir les fichiers à partir de A. –

0

Peut-on utiliser ajax? Par exemple, l'utilisateur clique sur le bouton envoyant une demande pour obtenir le fichier de B à A et un spinner apparaît sur la page. Ensuite, lorsque la copie est terminée, vous désactivez le spinner et donnez à l'utilisateur un lien de téléchargement.

j'ai été voté vers le bas et ne disposait pas des privilèges de commentaires, donc je pensais que j'élaborerait ici (peut-être c'est juste une solution terrible et je ne peux pas le voir):

  1. utilisateur demande le fichier en cliquant sur le lien
  2. demande est envoyée au serveur a et il désactive le lien via ajax
  3. serveur a copie le fichier dans un répertoire temporaire du serveur B
  4. serveur a renvoie un lien vers le fichier dans le dossier temporaire

Cela fonctionnerait si le serveur de documents n'était pas un serveur Web (SMB, AFS, NFS, etc.).

+0

"Toutes les idées pour résoudre ce problème Je ne peux pas pointer directement vers le document sur le serveur (B)", cela ne peut pas être fait à cause de cette dernière phrase. –

+0

Ceci est vraiment mauvais car il repose sur des actions qui ne sont pas nécessaires, telles que la désactivation du lien. Vous pouvez tout simplement cliquer sur le lien télécharger le fichier, puis répondre avec le fichier, avec tous les AJAX. Le navigateur va être verrouillé en attendant la réponse de toute façon. –

Questions connexes