J'ai une méthode de contrôleur MVC définie comme ceci: 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: p> 'Mon chemin de fichier' n'est pas un chemin virtuel valide. P>
blockQuote> Je veux juste que mon client puisse télécharger un fichier. Cela semble tellement plus complexe que nécessaire. P> 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) p> Pourquoi est-ce si difficile et comment puis-je le résoudre? P> Je m'en fiche si la solution est dans JS ou MVC. ... p> p>
3 Réponses :
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");
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>
ok, que actionResult code> votes est certainement digne de vote (regard sur les chiffres) même s'il va hâter ma propre défaite; p personnellement i> 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
Je fais une routine similaire. À l'heure actuelle, j'ai accès à des images du lecteur local p>
octet [] cimage = nouvelle webclient (). DownloadData (system.web.httpcontent.server.mappath ("~ / content / koala.jpg")); p>
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. P>
octet [] cimage = nouveau webclient (). DownloadData ("Server Partager" + /files/koala.jpg "); P>
Écrivez un service Web qui expose ces ressources et télécharge les fichiers de ce service.
Utilisation de JavaScript, vous pouvez effectuer une redirection simplement:
emplacement.replace (exterurctoDownload); code>