2010-07-01 3 views
3

J'ai donc réfléchi aujourd'hui. Je génère des fichiers CSV à partir de données déjà en mémoire dans mon application JavaScript, puis les transfère vers le navigateur de l'utilisateur via une invite de téléchargement de fichier - tout en JavaScript -.Téléchargement de fichier via JavaScript?

Est-ce possible?

+0

Quel est le contexte de cette application Javascript? Où est-ce qu'il tourne, un serveur web ou un navigateur? – Pointy

+0

Ne sait pas. Est-ce que tu l'as essayé? – JohnFx

+2

Ceci n'est possible que sur un certain navigateur web développé par une équipe de Redmond qui utilise un framework propriétaire encombré de trous de sécurité appelés "ActiveX".Même alors, je pense que vous obtiendrez des avertissements lorsque vous le faites dans les versions les plus récentes de ce webbrowser. Dans tous les autres navigateurs Web que le monde connaît, cela n'est pas ** possible. – BalusC

Répondre

2

Si vous voulez le faire entièrement côté client, sans aucune interaction avec le serveur, vous aurez besoin d'au moins l'aide de Flash.

Jetez un oeil à Downloadify, est le meilleur que j'ai vu pour la génération de fichiers côté client.

Cochez la case demo.

+0

Excellent, merci beaucoup. – Drew

+0

Les réponses acceptées avec 0 votes ont l'air bête .. En voici une. – BalusC

+0

@BalusC, merci !, vous avez raison, c'est simplement une API JavaScript * proxy * pour ActionScript. – CMS

0

Si votre serveur est configuré pour déclencher un téléchargement pour votre type MIME donné, vous pouvez simplement faire une ligne droite location.href = 'myFile.csv'.

Ceci demandera à l'utilisateur d'ouvrir ou de sauvegarder le fichier comme vous le souhaitez.

Cela nécessite que votre serveur soit configuré pour se comporter de cette manière.

1

La solution pour télécharger du contenu local/côté client via javascript n'est pas simple. J'ai implémenté une solution en utilisant smartclient-html-jsp.

Voici la solution:

  1. Je suis dans la construction du projet sur SmartClient. Nous avons besoin de télécharger/exporter des données d'une grille (table comme structure).
  2. Nous utilisions des services Web RESTish pour traiter les données du côté serveur. Donc, je ne pouvais pas frapper l'url deux fois; un pour la grille et une seconde fois pour l'export/transformer les données à télécharger.
  3. Ce que j'ai fait est fait deux JSP à savoir: blank.jsp et export.jsp.
  4. blank.jsp est littéralement vide, maintenant j'ai besoin d'exporter les données de la grille que j'avais déjà du côté client.
  5. Maintenant, quand un utilisateur demande à exporter les données de la grille (en cliquant sur un lien), je fais ci-dessous: a. Ouvrez une nouvelle fenêtre avec l'URL blank.jsp b. using document.write Je crée un formulaire dedans avec un texte de nom de champ dedans et place des données pour exporter dedans. c. Maintenant POST ce formulaire à export.jsp de la même hiérarchie. d. Le contenu de export.jsp Je suis coller ci-dessous sont explicites.

// code de début

<%@ page import="java.util.*,java.io.*,java.util.Enumeration"%> 
<% 
    response.setContentType ("text/csv"); 
    //set the header and also the Name by which user will be prompted to save 
    response.setHeader ("Content-Disposition", "attachment;filename=\"data.csv\""); 
    String contents = request.getParameter ("text"); 
    if (!(contents!= null && contents!="")) 
     contents = "No data"; 
    else 
     contents = contents.replaceAll ("NEW_LINE", "\n"); 

    //Open an input stream to the file and post the file contents thru the 
    //servlet output stream to the client m/c 

    InputStream in = new ByteArrayInputStream(contents.getBytes()); 
    ServletOutputStream outs = response.getOutputStream(); 

    int bit = 256; 
    int i = 0; 
    try { 
     while ((bit) >= 0) { 
      bit = in.read(); 
      outs.write(bit); 
     } 
     //System.out.println("" +bit); 
    } catch (IOException ioe) { 
     ioe.printStackTrace(System.out); 
    } 
    outs.flush(); 
    outs.close(); 
    in.close(); 
%> 
<HTML> 
<HEAD> 

</HEAD> 

<BODY> 


</BODY> 
</HTML> 

// fin de code

Ce code est testé et déployé/travail dans un environnement de production, aussi cette fonctionnalité est multi-navigateur.

Merci Shailendra

+0

Google a également ajouté un accès API File natif dans Chrome. – Drew

+0

Hey @Drew, ces API sont-elles spécifiques au navigateur Chrome? Les miens sont indépendants du navigateur et aussi aucun problème sur IE qui arrête l'exécution automatique du script en appliquant la sécurité Internet. – shaILU

Questions connexes