2010-12-15 6 views
0

Ich brauche Datei-Download zu implementieren. Ich möchte keine Server-Seite Datei-URLs zum Download direkt. Ich erstellt ein Servlet, das die Datei öffnet und es in Stream von response.Now kommt Ich habe onResponseReceived (Request Request, Response Response), die beim Empfang der Antwort aufgerufen wird. Wie weiter? .Meine Operation erforderlich ist, Datei im Stream sollte auf Client-Computer heruntergeladen werden.Datei-Download mit RequestBuilder von gwt

kann mir einer dabei helfen?

Antwort

2

Haben Sie versucht Window.open(ServletUrl, "_parent", "location=no")?

Und versuchen, die Contenttype in der Antwort auf „application/exe“

Diesen Benutzer auffordern, zu speichern oder zu laufen.

Servlet-Code:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    String filename = URLDecoder.decode(request.getPathInfo(), "UTF-8"); 
    File file = new File("/path/to/files", filename); 
    response.setContentType("application/x-download"); 
    response.setHeader("Content-Disposition", "attachment; filename=" + filename); 
    response.setHeader("Content-Length", file.length()); 

    BufferedInputStream input = null; 
    BufferedOutputStream output = null; 

    try { 
     input = new BufferedInputStream(new FileInputStream(file)); 
     output = new BufferedOutputStream(response.getOutputStream()); 

     byte[] buffer = new byte[8192]; 
     for (int length = 0; (length = input.read(buffer)) > 0;) { 
      output.write(buffer, 0, length); 
     } 
    } finally { 
     if (output != null) try { output.close(); } catch (IOException ignore) {} 
     if (input != null) try { input.close(); } catch (IOException ignore) {} 
    } 
} 
+0

danke für die Antwort ..aber ich will Anzeige url dnt i user..if tun this..it wird ein neues Fenster mit der richtigen URL öffnen ..i dnt möchte tht ... ich möchte etwas in gwt ..which machen http req zu servlet und bekomme das Objekt und Benutzer shud kann herunterladen .. wie das, was wir in rapidshare sehen ... natürlich ist das zu komplex..aber ich möchte auf ähnliche Weise. – Bhaswanth

+0

@Bhaswanth Bitte versuchen Sie diese Methode. Denn mit dieser Methode geben Sie dem Benutzer einen Servlet-Speicherort und keinen Speicherort.Servlet schreibt die Datei auf den Client. Und wegen des Inhaltstyps wird kein Browserfenster geöffnet, sondern nur das Speichern, Ausführen, Abbrechen des Eingabeaufforderungsdialogs. –

+0

ya..das ist gut..aber ich würde gerne wissen, wie das getan werden kann ..wie kann ich den Download automatisch im Code auslösen ... – Bhaswanth

2

Sie alle _blank nutzen könnten, _parent, _top, _self

  • "_blank" Attribut bewirkt, dass das "Ziel" des Hyperlinks in einem öffnen Neu
  • Das Attribut "_top" bewirkt, dass das "Ziel" des Hyperlinks unter der obersten Ebene aller aktuell definiertenangezeigt wirdFramesets.
  • Attribut "_parent" bewirkt, dass "target" des Hyperlinks im gesamten Bereich des aktuellen Frameset anzuzeigen.
  • Attribut "_self" bewirkt, dass das "Ziel" des Hyperlinks im aktuellen Frame geöffnet wird.

Source

0

Sie können das tun, ohne das Servlet, mit nur GWT RPC und Data URIs:

  1. Machen Sie Ihre GWT RPC-Methode den Inhalt der Datei oder die Daten zurückgeben, die Datei zu erzeugen.
  2. Formatieren Sie auf der Clientseite Data URI mit dem empfangenen Dateiinhalt oder generieren Sie den Dateninhalt.
  3. Verwenden Sie Window.open, um einen Dateispeicherdialog zu öffnen, der das formatierte DataURI übergibt.

Werfen Sie einen Blick auf diese Referenz, die Data URI Nutzung zu verstehen:

Export to csv in jQuery

Verwandte Themen