Hallo zusammen, ich habe folgende Aufgabenstellung:
Ich hole mir von einem Webservice eine Datei (TIF, PNG, etc.). Aktuell wird der Benutzer nach einem Pfad gefragt und nach dem Speichern ob die Datei gleich angezeigt werden soll.
Ich würde gerne den Inputstream direkt umleiten und die Datei öffnen ohne diese auf der Festplatte zu speichern. Ist das möglich?
Alternativ muss ich mit einem Temp-Verzeichnis arbeiten und die Datei nach dem Schließen wieder löschen. Bevor ich aber das implementiere, dachte ich mir, ich frage zuerst mal in der Community nach.
Hier meine Methode:
Ich hole mir von einem Webservice eine Datei (TIF, PNG, etc.). Aktuell wird der Benutzer nach einem Pfad gefragt und nach dem Speichern ob die Datei gleich angezeigt werden soll.
Ich würde gerne den Inputstream direkt umleiten und die Datei öffnen ohne diese auf der Festplatte zu speichern. Ist das möglich?
Alternativ muss ich mit einem Temp-Verzeichnis arbeiten und die Datei nach dem Schließen wieder löschen. Bevor ich aber das implementiere, dachte ich mir, ich frage zuerst mal in der Community nach.
Hier meine Methode:
Java:
public static void downloadFile(String fileURL, File saveDir, Settings settings)
throws IOException {
URL url = new URL(fileURL);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod( "GET");
httpConn.setRequestProperty( "X-AUTH-TOKEN", settings.getToken() );
int responseCode = httpConn.getResponseCode();
// always check HTTP response code first
if (responseCode == HttpURLConnection.HTTP_OK) {
String fileName = "";
String disposition = httpConn.getHeaderField("Content-Disposition");
String contentType = httpConn.getContentType();
int contentLength = httpConn.getContentLength();
if (disposition != null) {
// extracts file name from header field
int index = disposition.indexOf("filename=");
if (index > 0) {
fileName = disposition.substring(index + 10,
disposition.length() - 1);
}
} else {
// extracts file name from URL
fileName = fileURL.substring(fileURL.lastIndexOf("/") + 1,
fileURL.length());
}
System.out.println("Content-Type = " + contentType);
System.out.println("Content-Disposition = " + disposition);
System.out.println("Content-Length = " + contentLength);
System.out.println("fileName = " + fileName);
// opens input stream from the HTTP connection
InputStream inputStream = httpConn.getInputStream();
File saveFilePath = new File(saveDir, fileName);
// opens an output stream to save into file
FileOutputStream outputStream = new FileOutputStream(saveFilePath);
int bytesRead = -1;
byte[] buffer = new byte[BUFFER_SIZE];
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
outputStream.close();
inputStream.close();
System.out.println("File downloaded");
int result = JOptionPane.showConfirmDialog( null, "Speichern erfolgreich. Datei öffnen?");
if (result == JOptionPane.OK_OPTION)
{
try
{
ProcessBuilder pb = new ProcessBuilder( "cmd", "/c", saveFilePath.getAbsolutePath() );
pb.start();
}
catch ( IOException ex )
{
System.out.println( "Fehler: "+ex );
}
}
} else {
System.out.println("No file to download. Server replied HTTP code: " + responseCode);
}
httpConn.disconnect();
}