Comment puis-je appeler un MVC FileContentResult par Jquery et invite l'utilisateur à enregistrer sur le retour?
Je suis de la génération d'un fichier CSV à partir d'un site web MVC 3 et à l'aide d'un FileContentResult à transmettre à l'utilisateur. Cela a très bien fonctionné, mais il a fallu 30 secondes pour le csv pour générer et donc de 30 secondes avant de vous inviter à enregistrer a été donnée à l'utilisateur.
public virtual FileContentResult GetSpreadsheet(string id)
{
var service = new SpreadsheetService();
var result = service.GetCSV();
return File(new System.Text.UTF8Encoding().GetBytes(result.Message), "text/csv", "Report123.csv");
}
Donc je pensais que je viens de l'appeler via JQuery - mais c'est (sans surprise!) juste vide le CSV à la page.
$.post("/Home/GetSpreadsheet/" + id, null, function (data) {
$('#resultDiv').html(data);
});
Personne ne sait comment je voudrais générer l'invite à enregistrer maintenant que j'ai les données de retour? Grâce
OriginalL'auteur Andy Clarke | 2012-03-22
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas le faire. Oublier que. Il est impossible de télécharger des fichiers en utilisant AJAX. En fait, l'appel AJAX, vous a frappé le serveur, le serveur va envoyer le contenu du fichier vers le client, l'AJAX succès de rappel sera déclenchée et passé en argument le contenu du fichier et c'est là que tout se termine pour vous. À l'aide de javascript, vous ne pouvez pas, absolument pour des raisons évidentes, d'enregistrer directement le fichier sur l'ordinateur client et vous ne pouvez pas demander la boîte de dialogue Enregistrer sous.
Donc, au lieu d'utiliser AJAX, il suffit de créer un point d'ancrage:
Maintenant, si la configuration du serveur la
Content-Disposition
en-tête deattachment
le navigateur demande à l'utilisateur de télécharger et d'enregistrer le fichier à un certain endroit de son choix sur son ordinateur.L'amour de la réponse. M'a fait penser à la chanson "Screamager" par le traitement.
Quels sont ces "absolument évident" raisons? J'ai réussi à obtenir le fichier d'octets à l'aide d'ajax, j'ai juste besoin de les rendre
OriginalL'auteur Darin Dimitrov
Si vous ne souhaitez pas utiliser un point d'ancrage, l'utilisation d'une iframe masqué et définir la src de l'iframe à l'url du fichier à télécharger.
Au lieu de la '$.la poste(...)' utilisation en ligne:
Ou vous pouvez donner un essai sur la Plugin jQuery pour la demande de l'Ajax comme les Téléchargements de Fichiers
À l'aide du plugin, vous pouvez le télécharger par invocking:
OriginalL'auteur Kibria
Vous pouvez l'utiliser en JavaScript:
OriginalL'auteur vapcguy