9
votes

Téléchargement de fichier en utilisant Java, Struts 2 et Ajax

Je veux donner le téléchargement de fichier à l'aide de Java, Struts2 et Ajax.

sur ma page HTML Il y a un bouton appelé "Exporter" en cliquant sur quel appel Ajax sera effectué qui exécutera une requête et créera un fichier .xls à l'aide du code et je souhaite donner ce fichier à télécharger à l'utilisateur sans le stocker sans le stocker. sur le disque dur.

Quelqu'un peut-il savoir comment faire cela en utilisant Struts2 et Ajax en Java?

Y a-t-il un exemple disponible?

Faites-moi savoir si vous avez besoin de plus de détails de ma part ...

merci.

amar4kintu


0 commentaires

6 Réponses :


11
votes

Vous n'avez pas à utiliser Ajax dans ce cas. Ayez simplement votre bouton Soumettre le formulaire à votre action de Struts et utiliser l'action utilise le Résultat du flux type.

Exemple:

dans vos jambes XML: xxx

Votre action fournira alors un Public Inpurstream getinputtream () Pour transmettre les données.

Je présume que toute la bibliothèque utilisée pour générer les fichiers Excel ( POI ?) Peut écrire la sortie sur une sortie

une manière rapide et sale de convertir ça en Un introuvable : xxx


3 commentaires

Bonjour, je mets Follwing dans ma strats.xml application / vnd.ms-excel filtream pièce jointe; nom_fide = reportation.xls 1024 J'ai suivi vos instructions, mais il fournit un fichier de téléchargement avec nom d'action exportrepor.action au lieu de reporter.xls alors quelle devrait être la raison?


Alors, tu utilisais Msie? Soit passer le nom de fichier en tant que URL Pathinfo ou utilisez un meilleur WebBrowser.


J'utilise Firefox et cela devrait me donner le fichier de téléchargement comme rapport.xls mais cela me donne à la place ExporTreport.action à télécharger. Et si je le renommerai à signaler.xls. Il montre un fichier .xls parfait que j'exporte .. Est-ce que quelqu'un peut dire ce que je manque?



0
votes

Atlast, j'ai pu le résoudre comme suit .. J'ai écrit la ligne suivante dans ma fonction de classe d'action et j'ai pu télécharger le fichier avec nom repor.xls au lieu de exportrept.action . Je ne sais pas exactement .. pourquoi? xxx

suivi est dans mon strats.xml fichier. J'ai supprimé param. > Xxx

J'espère que cela aidera quelqu'un.

merci.

amar4kintu


0 commentaires

0
votes

J'utiliserais ce type d'annotation sur la classe d'action:

@Result(name = "success", type= StreamResult.class,
          params = {"contentType", "application/vnd.ms-excel",
                    "contentDisposition", "attachment; filename=report.xls"},
          value = "reportFileStream"
)


0 commentaires

2
votes

En suivant la question d'AMAR4Kintu concernant les fichiers enregistrés comme exporTrepor.action au lieu de reporter.xls, cela se produit dans IE si le format suivant n'est pas suivi dans votre fichier Strubs.xml:

<result name="download" type="stream">
        <param name="contentDisposition">attachment;filename="${flashcardSetBean.title}.xlsx"</param>
        <param name="contentType">application/vnd.openxmlformats-officedocument.spreadsheetml.sheet</param>
        <param name="inputName">inputStream</param>
        <param name="bufferSize">1024</param>
</result>


0 commentaires

2
votes

Juste pour votre référence, nous pouvons faire la même chose à l'aide d'Annotation:

public class MyAction {
    private InputStream fileInputStream;
    private String logoName;

    @Action(value="/downloadLogo", 
        results={
            @Result(name="success", type="stream", 
            params = {
                    "contentType", "application/image/gif",
                    "inputName", "fileInputStream",
                    "contentDisposition", "filename=\"${logoName}\"",
                    "bufferSize", "1024"
            })
        }           
    )    
    public String downloadLogo() throws Exception {
        logoName = "test.jpg";
            fileInputStream = new FileInputStream(new File("DirePath", logoName));
    }
}


0 commentaires

0
votes

Une meilleure approche de la conduite supérieure à une intrigue est expliquée ci-dessous par opposition à la Réponse de Zoogiezor au-dessus

InputStream is = new PipedInputStream();
PipedOutputStream out = new PipedOutputStream((PipedInputStream) is);
wb.write(out);


0 commentaires