2014-07-21 9 views
5

Poniższy fragment kodu znajduje się na stronie FSharp.Data http://fsharp.github.io/FSharp.Data/library/Http.html. Typy Text i Binary są odpowiednio następujące. Nie jest dobrze, aby uzyskać cały plik 2GB w pamięci, a następnie zapisać go w pliku.Jak pobierać duże pliki za pomocą modułu http FSharp.Data?

let logoUrl = "https://raw.github.com/fsharp/FSharp.Data/master/misc/logo.png" 
match Http.Request(logoUrl).Body with 
| Text text -> 
    printfn "Got text content: %s" text 
| Binary bytes -> 
    printfn "Got %d bytes of binary content" bytes.Length 
+4

'Http.RequestStream (logoUrl) .ResponseStream.CopyTo (outStream) 'wydaje się, jakby to zrobił. – Daniel

+0

Ładne, dawka musi sprawdzić, czy zwracany obiekt 'Response' z' RequestStream' i 'ResponseStream' nie ma wartości null? – ca9163d9

+1

Biorąc pod uwagę, że jest to biblioteka specyficzna dla F #, zgaduję, że nie. – Daniel

Odpowiedz

2

Nie sądzę, że można zachować ten sam kod, co na stronie internetowej FSharp.Data, aby pobrać ogromne pliki. Co mogę używać do pobierania dużych plików jest

async { 
    let! request = Http.AsyncRequestStream(logoUrl) 
    use outputFile = new System.IO.FileStream(fileName,System.IO.FileMode.Create) 
    do! request.ResponseStream.CopyToAsync(outputFile) |> Async.AwaitTaskVoid 
} |> Async.RunSynchronously 

Jeśli chcesz spróbować ściągnąć nieskończoną sprawdzanie plików the complete source (działa na własne ryzyko, to jest przy użyciu The Infinite File Download)

+1

AwaitTaskVoid jest tutaj http://stackoverflow.com/questions/8022909/how-to-async-awaittask-on-plain-task-not-taskt –

Powiązane problemy