J'ai une application Flex qui appelle une page .aspx sur notre serveur web, qui construit un fichier PDF ou Excel. À l'heure actuelle, j'utilise navigateToURL() pour appeler le fichier, et cela fonctionne correctement lorsque le fichier de sortie est construit avec succès. Cependant, s'il y a une erreur ou un délai, il n'y a aucun moyen de le savoir dans le film Flash. J'essaie d'utiliser URLLoader à la place, afin que je puisse écouter un code d'état HTTP, et savoir quand le chargement est terminé, cependant, l'URLLoader retourne simplement les données bitmap, sans que rien ne pousse l'utilisateur à ouvrir ou enregistrer le fichier de sortie. Est-ce qu'il y a un moyen de faire ça?Comment inviter un utilisateur à ouvrir ou enregistrer un fichier PDF renvoyé par un fichier .aspx?
Voici les deux versions de mon code ActionScript:
private function buildFile():void
{
var variables:URLVariables = new URLVariables();
variables.rptName = "report1";
variables.rptFormat = "PDF";
var request:URLRequest = new URLRequest();
request.url = "/buildFile.aspx";
request.method = URLRequestMethod.POST;
request.data = variables;
var loader:URLLoader = new URLLoader();
loader.addEventListener(HTTPStatusEvent.HTTP_STATUS,
httpStatusHandler);
loader.load(request);
}
private function buildFile():void
{
var variables:URLVariables = new URLVariables();
variables.rptName = "report1";
variables.rptFormat = "PDF";
var request:URLRequest = new URLRequest();
request.url = "/buildFile.aspx";
request.method = URLRequestMethod.POST;
request.data = variables;
navigateToURL(request, "_self");
}
Pour votre information, voici le bloc de code qui génère actuellement le fichier PDF ou Excel:
System.Web.HttpContext httpC;
httpC = System.Web.HttpContext.Current;
httpC.Response.Clear();
httpC.Response.ClearHeaders();
httpC.Response.Expires = 0;
switch (ReportFormat)
{
case "Excel": Response.ContentType = "application/vnd.ms-excel"; break;
case "PDF": Response.ContentType = "application/pdf"; ; break;
}
Response.AddHeader("Content-disposition", "attachment;filename=" + fileName);
BinaryWriter binaryWriter = new BinaryWriter(httpC.Response.OutputStream);
binaryWriter.Write(result);
Je vais devoir vérifier avec le développeur .NET pour voir comment il définit les en-têtes de réponse. J'espérais que quelqu'un pourrait m'aider sur le Flex. –
@Eric, pourquoi ne pas simplement rediriger l'utilisateur vers l'URL appropriée avec un fichier PDF? –
Nous voulons afficher la boîte de dialogue qui donne à l'utilisateur l'option "Enregistrer" ou "Ouvrir". Le code existant fonctionne correctement lorsque j'utilise navigateToURL() avec "_self" comme cible. Mais, il n'y a aucun moyen de suivre la progression et/ou l'achèvement. C'est pourquoi j'essaie d'utiliser URLLoader.load(). –