HTTP Datei herunterladen

Sogomn

Bekanntes Mitglied
Hallo. Ich beschäftige mich momentan mit dem Herunterladen von Dateien aus dem Internet. Klappt super, ich hab' nur ein Problem: Wie bekomme ich den Namen der Datei?

Ich habe das wiefolgt implementiert:

Java:
public byte[] downloadFile(final String address) {
   try {
      URL url = new URL(address);
      DataInputStream in = new DataInputStream(url.openStream());
      ByteArrayOutputStream out = new ByteArrayOutputStream();
      
      byte[] buffer = new byte[1024];
      int length = 0;
      while ((length = in.read(buffer)) != -1) {
         out.write(buffer, 0, length);
      }
      out.flush();
      out.close();
      in.close();

      return out.toByteArray();
   } catch (Exception ex) {
      ex.printStackTrace();
   }
}

Jetzt bekomme ich die Datei, muss sie aber manuell benennen. Wie bekommen Webbrowser das hin, den Dateinamen auszulesen? Wird der überhaupt übermittelt?
 
Super, vielen Dank!! Jo, wie man mit Headern arbeitet weiß ich, mir fehlte nur die Information, wie der Name übermittelt wird.

Mir fällt gerade auf, dass ich das return-Statement in dem catch-Block vergessen habe. 😳

EDIT: Irgendwie wird der Name nicht übermittelt...
Code:
Content-Disposition: attachment;

Ist die Art der Anfrage wichtig (GET, POST...)? Und muss ich eine bestimmte Headerinformation senden?
 
Zuletzt bearbeitet:
Vermutlich steh ich grad auf der Leitung aber du musst doch den Namen wissen, um die URL an die Funktion zu übergeben oder ist es ein dynamisch generierter Link wie z.B download.php?id=1? Dann brauchst du ja auch einfach nur den ankommenden Dateinamen als String zu splitten.
 
Ja, es ist leider kein direkter Link in dem Sinne. Sonst könnte ich ja einfach den substring vom letzten Punk aus nehmen.
 
Da mein Chrom das Dingen text.txt nennt, nehme ich mal an er wird den Namen irgendwo finden oder heißt das File original anders?

Gruß

Claus
 
http://ge.tt/api/1/files/9O4e3ZA2/0/blob?download
Man wird um die 5 mal weitergeleitet. Ich hab' mir die Headerinformationen angeguckt, nirgends ist der Dateiname zu sehen.

Ich habe folgende Seite verwendet, um mir die Http-Headerinformationen anzeigen zu lassen: HTTP Headers Online Check | View HTTP Response Header
Dabei erfolgen 2 Redirekts, wobei man schließlich bei einer Url angelangt, die auf die Datei test.txt zeigt.

Das Ergebnis:
Code:
HTTP Status for: "http://ge.tt/api/1/files/9O4e3ZA2/0/blob?download"
•HTTP/1.1 307 Temporary Redirect
•location: http://w787672.open.ge.tt/1/files/9O4e3ZA2/0/blob?download
•Connection: close
•HTTP/1.1 307 Temporary Redirect
•location: http://s3.kkloud.com.s3.amazonaws.com/gett/9O4e3ZA2/[COLOR="#FF0000"]test.txt[/COLOR]?response-content-disposition=attachment%3B&AWSAccessKeyId=AKIAI7XHZJPL62V2UOVA&Signature=9vt5CymAXa9vjhI3vY24rcR5SSk%3D&Expires=1424078126
•connection: close
•transfer-encoding: chunked
•HTTP/1.1 200 OK
•x-amz-id-2: LJRW19dGnJAOw3Z3aqLFDpY3bVcZrnd7PxIELy4WeG/HEzceTKgQTUmdg/ZB7zsCvL04FvpzPUw=
•x-amz-request-id: 1C7F49C184832DE9
•Date: Mon, 16 Feb 2015 09:09:35 GMT
•Content-Disposition: attachment;
•Last-Modified: Mon, 16 Feb 2015 07:50:11 GMT
•ETag: "0703770be20ef769d7a29c649dff3a45-1"
•Accept-Ranges: bytes
•Content-Type: text/plain
•Content-Length: 6
•Server: AmazonS3
•Connection: close
 

Neue Themen


Zurück
Oben