Appel Ajax pour télécharger le fichier renvoyé par le service RESTful
Je suis assez nouveau à l'AJAX. Je vous envoie une requête au serveur à l'aide d'AJAX. Le service retourne un fichier texte. Mais pas de boîte de téléchargement s'affiche lorsque les données retournées.
Le service rest qui renvoie le fichier se présente comme suit:
@Path("/examples")
public class ExampleCodesRest {
@POST
@Path("/getcode")
@Produces(MediaType.TEXT_PLAIN)
public Response getCodes(@Context ServletContext context){
String in=context.getRealPath("/WEB-INF/reports.jrxml");
File file=new File(in);
ResponseBuilder response = Response.ok((Object) file);
response.header("Content-Disposition",
"attachment; filename=\"file_from_server.log\"");
return response.build();
}
}
Mon appel AJAX est comme suit:
$('a#link').click(function(event){
event.preventDefault();
$.ajax({
url: '/reports/rest/examples/getcode',
type: 'POST'
});
});
Le téléchargement du fichier succès sans AJAX.
Avec l'AJAX, il ne télécharge pas le fichier.S'il vous plaît conseils.
source d'informationauteur Rickesh John
Vous devez vous connecter pour publier un commentaire.
Conseil est simple: vous ne pouvez pas télécharger des fichiers via AJAX - il une politique de sécurité. Je veux dire, vous pouvez télécharger les données, mais vous ne pouvez pas l'enregistrer sur le disque à partir de JavaScript côté.
Si vous voulez télécharger un fichier sur un clic, vous pouvez simplement ajouter
href
vousa
tag. Ou ouvrir une nouvelle fenêtre avec le fichierURL
.A) vous n'avez pas de rappel pour recevoir des données en arrière
b) Ajouter l'erreur de rappel pour vous le code de sorte que vous pouvez voir si il ya de recevoir des erreurs après l'appel:
Edit: C'est, si vous voulez afficher le texte dans la page. Si vous voulez télécharger le fichier, ce n'est pas cela, vous ne pouvez pas utiliser ajax
Vous ne pouvez pas le faire directement à partir de l'AJAX, mais vous pouvez contourner ce problème en ayant un iframe qui initie le téléchargement. Voir Ajax téléchargement de Fichier Question pour une discussion.