2010-12-03 19 views
1

Je veux envoyer une demande à mon Zend AMF pour ouvrir une boîte de dialogue pour un téléchargement de fichier.Comment ouvrir une boîte de dialogue de fichier de Zend AMF + AS3

Le processus:

Envoyez une demande au serveur Zend de mon flash App, processus, les résultats MySql avec PHP, puis envoyer le résultat au navigateur en téléchargement de fichier (.csv) et un résultat vrai ou false à l'application

J'ai le code qui fonctionne très bien en dehors de l'environnement Zend, mais bien sûr, quand je vais à echo/imprimer le fichier - il renvoie au flash sans rien se produire.

Y a-t-il un moyen de contourner ce problème?

 $file = ""; 

     $outtype = "Content-type: application/octet-stream"; 
     header($outtype); 

     $outtype = 'Content-disposition: attachment; filename="file.csv"';   
     header($outtype); 

     $stmt->bind_result($id, $username, $email, $location); 

     while($stmt -> fetch()){ 

      $file .= '"'.addslashes($col1).'"'; 
      $file .= ',"'.addslashes($col2).'"'; 
      $file .= ',"'.addslashes($col3).'"'; 
      $file .= "\n"; 

     } 

     print $file; 
     exit; 

Ou, dois-je simplement demander cela en dehors de la demande de zend ...?

i Jusqu'à présent, ont changé les en-têtes pour utiliser les en-têtes zend:

 $this->setHeader('Content-Type', 'application/octet-stream');   
     $this->setHeader('Content-disposition:', 'attachment'); 
     $this->setHeader('filename:', 'file.csv'); 

Mais ne suis pas sûr comment l'attacher $ fichier « file.csv » et puis retourner un résultat vrai Flash ET télécharger le fichier .. (zend noob ici j'ai peur ..)

Répondre

0

Utilisez-vous Zend MVC? Si oui, assurez-vous que vous ne faites pas de mise en page ....

Je ne suis pas trop content de la sortie; statement ... puisque zend utilise un framework mvc, il construit la réponse et la restitue. Provoquer le script pour quitter peut signifier que le contenu n'est pas rendu correctement.

De même, assurez-vous que vous utilisez les fonctions zend correctes pour générer les en-têtes, il est très possible que zend ajoute des en-têtes conflictuels à la réponse. Voir http://framework.zend.com/manual/en/zend.controller.response.html

+0

Je vais devoir prendre un bon long regard sur cela. Si je suis honnête - c'est un peu dans la profondeur pour mes compétences, mais merci de m'avoir mis dans la bonne direction! – Beans

0

Le processus pourrait être:

-1 Send a request to Zend Framework 
-2 Query Mysql, process the result & write the file to the server 
-3 Zip the file 
-4 return the file url to Flash 
-5 inform the user that the file is ready for download 
-6 a user click calls navigateToURL from Flash, using the returned url 

Comme il est une URL de fichier zip, le navigateur doit ouvrir une boîte de dialogue.

Selon cet extrait de la documentation, il semble que vos options sont assez limitées, car il est non seulement une question Flash ...

In Flash Player 10 and later running in a browser, using this method 
programmatically to open a pop-up window may not be successful. 
Various browsers (and browser configurations) may block pop-up windows 
at any time; it is not possible to guarantee any pop-up window will appear. 
However, for the best chance of success, use this method to open a 
pop-up window only in code that executes as a direct result 
of a user action (for example, in an event handler for a 
mouse click or key-press event.) 
+0

Malheureusement flash ne permet pas de générer de nouvelles fenêtres lorsqu'il n'est pas directement lié à un événement de la souris. Un problème frustrant quand il s'agit d'as3 + zendAMF. Votre méthode fonctionnerait, mais seulement si après l'URL du fichier est retourné, l'utilisateur clique sur un autre bouton. Ce n'est pas un scénario idéal, mais cela fonctionne. – Beans

+0

Ce n'est pas si grave, vous pourriez avoir une boîte d'alerte confirmant que le fichier est prêt à être téléchargé et demander à l'utilisateur si poursuivre ou annuler. – PatrickS

+0

Ce n'est pas idéal. c'est un clic de plus entre l'utilisateur qui sélectionne une action - et le résultat. vous ne vous attendriez pas à un login pour vous demander si vous vouliez réellement, ou si vous vouliez vraiment télécharger un fichier. Si c'était quelque chose qui ne nécessitait pas un tel acte spécifique, je pourrais le permettre - mais dans ce cas (dans un panneau d'administration) vous avez déjà connecté à l'admin, choisi la plage de dates - et cliquez sur soumettre. À ce stade, je ne veux pas gêner l'utilisateur et l'action. – Beans