6
votes

Comment initialiser le téléchargement de fichier à partir d'un serveur externe?

J'ai une méthode de contrôleur MVC définie comme ceci: xxx

si je modifie le premier paramètre à l'URL d'un serveur hébergé sur un serveur cloud distinct, alors je reçois l'erreur:

'Mon chemin de fichier' n'est pas un chemin virtuel valide.

Je veux juste que mon client puisse télécharger un fichier. Cela semble tellement plus complexe que nécessaire.

J'ai une URL qui pointe vers un fichier PDF. Je veux que mon client télécharge que pdf sans cliquer sur quoi que ce soit. (Le téléchargement commencera à une réponse de service réussie)

Pourquoi est-ce si difficile et comment puis-je le résoudre?

Je m'en fiche si la solution est dans JS ou MVC. ...


1 commentaires

Utilisation de JavaScript, vous pouvez effectuer une redirection simplement: emplacement.replace (exterurctoDownload);


3 Réponses :


2
votes

Vous pouvez simplement rediriger em> l'utilisateur du rapport à distance; Si ce n'est pas une option, vous aurez besoin de la proxy:

byte[] blob;
using(var client = new WebClient()) {
    blob = client.DownloadData(remoteUrl);
}
return File(blob, "application/pdf", "report1.pdf");


0 commentaires

9
votes

Pourquoi est-ce si difficile et comment puis-je le résoudre? P>

En fait, ce n'est pas si difficile: p> xxx pré>


Maintenant, il y a évidemment une faille grave avec cette méthode car elle protège le fichier en mémoire. Bien que cela puisse travailler très bien pour de petits rapports, cela pourrait être problématique avec de gros dossiers et encore plus problématiques si vous avez beaucoup d'utilisateurs impatients de mettre leurs mains sur ce grand rapport. P>

Il y a aussi une autre défaute grave avec le Première action du contrôleur. Il mélange des responsabilités. Il contient du code d'infrastructure et je vous conteste de le tester de l'unité en isolant. P>

Alors, résolvons ces 2 problèmes graves en écrivant un résultat d'action personnalisé: P>

<a href="http://foo.com/bar.pdf">Download report</a>


1 commentaires

ok, que actionResult votes est certainement digne de vote (regard sur les chiffres) même s'il va hâter ma propre défaite; p personnellement J'aurais utilisé quelques paramètres, Mais cela montre le mécanisme joliment (éditer) Darn, maintenant vous avez également ajouté les paramètres aussi; p



0
votes

Je fais une routine similaire. À l'heure actuelle, j'ai accès à des images du lecteur local

octet [] cimage = nouvelle webclient (). DownloadData (system.web.httpcontent.server.mappath ("~ / content / koala.jpg"));

Comment pourrais-je accéder à une action sur notre serveur SQL. J'ai des images dans un dossier sur le serveur SQL que je veux récupérer.

octet [] cimage = nouveau webclient (). DownloadData ("Server Partager" + /files/koala.jpg ");


1 commentaires

Écrivez un service Web qui expose ces ressources et télécharge les fichiers de ce service.