German Wie Datei vom server in der DirInternal speichern?

Midimaster

Active Member
Licensed User
Ich verzweifle noch mit der Dokumentation zu B4A... Heute morgen dachte ich es wäre nur ein Klacks eine Datei von meinem Server zu holen und gleich im SSD-Speicher abzulegen.

Die Tutorials sind so widersprüchlich und oft veraltet oder beginnen gleich wieder damit, dass eine Library modifiziert wurde für das Beispiel. Daher meine Bitte und Frage: Wie geht das mit den ganz normalen Bordwerkzeugen von B4A?

Ich benutze die OKHttpUtil2-Bibliothek

das kann ich schon und hat funktioniert:
Bilder vom Server holen und gleich einem View zuweisen
Daten vom Server holen und einem Stream zuweisen

B4X:
Sub Globals
    ....
    Private MyJob As HttpJob
End Sub

Sub Activity_Create(FirstTime As Boolean)
    ...
    MyJob.Initialize("MyJob", Me)


Sub Button1_Click
    MyJob.Download("http://Myserver.de/temp/Wikinger.jpg")
    MyJob.JobName="wiki"
End Sub


Sub Button2_Click
    MyJob.Download("http://MyServer.de/temp/Oma.jpg")
    MyJob.JobName="oma"
End Sub

Sub Jobdone(Job As HttpJob)
        Log("Jobname=" & Job.JobName)
        If Job.Success=True Then
            If Job.JobName="wiki" Then
                Activity.SetBackgroundImage(Job.GetBitmap)
            Else If Job.JobName="oma" Then
                Log("Input Stream from internet")
                Private buffer() As InputStream
                buffer=Job.GetInputStream()

                Private dahin As OutputStream
                dahin=File.OpenOutput(File.DirInternal,"test.jpg",False)

            End If
        Else
            Log("Error beim Download " & Job.ErrorMessage)
        End If
        Job.Release
End Sub

was mir nicht gelingen will, ist den hereinkommenden Stream jetzt irgendwie in eine Datei umzuleiten.
 
Last edited:

DonManfred

Expert
Licensed User
Longtime User
B4X:
   If j.Success Then
       Dim out As OutputStream = File.OpenOutput(File.DirInternal, "filename.dat", False)
     File.Copy2(j.GetInputStream, out)
     out.Close '<------ very important
   End If
 

Midimaster

Active Member
Licensed User
Danke! das hat funktioniert.

Scheinbar war der Umweg, den ich über den Buffer machen wollte das Problem. Dies funktioniert nämlich nicht:
B4X:
                Private buffer() As InputStream
                buffer=Job.GetInputStream()
                Private dahin As OutputStream
                dahin=File.OpenOutput(File.DirInternal,"test.jpg",False)
                File.Copy2(buffer, dahin)
                dahin.Close

Wenn man den Job-Stream wie Du gleich in der FileCopy-Zeile erwähnt läuft es .

So ,jetzt geht es gleich weiter zur Suche nach der passenden UNZIP-Routine.
 
Top