Input/Output Heruntergeladene Datei direkt nach dem Download öffnen ohne zu speichern

HarleyDavidson

Bekanntes Mitglied
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:

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();
    }
 
Das kommt darauf an, mit welchem Programm wird denn diese Datei gleich angezeigt? (oder hängt das vom Dateityp ab?)

Wenn es ein selbstgeschriebenes Programm wäre, kann man dies sicher irgendwie bewerkstelligen.
Bei Textdateien sollte es auch möglich sein den Inhalt zu lösen und in einen Texteditor zu pasten 😉

Aber schöner ist es natürlich über eine Datei im temp-Verzeichnis die gelöscht wird sobald man das Programm schließt.
Der Vorteil: solltest du eine Datei nochmal runterladen wollen kannst geht das schneller wenn sie noch im temp-Verzeichnis liegt

PS: Soweit ich mitbekomme machen viele andere Programme auch nichts anderes als über ein temp-Verzeichnis zu arbeiten.
 

Zurück
Oben