digitalmars.D.learn - Downloading a file and showing progress via curl.
- BoQsc (6/25) Aug 20 2019 Hello everyone,
- Daniel Kozak (2/33) Aug 20 2019 For that you can use https://dlang.org/phobos/std_file#append
- BoQsc (2/26) Aug 20 2019
- Vladimir Panteleev (8/9) Aug 20 2019 Don't do that. It will reopen and close the file on every
- Daniel Kozak (3/28) Aug 20 2019 You just need to save data in onReceive callback
Hello everyone, I found this snippet on https://dlang.org/phobos/std_net_curl.html#.HTTPimport std.net.curl : HTTP; import std.stdio : writeln; void main() { auto http = HTTP(); // Track progress http.method = HTTP.Method.get; http.url = "https://upload.wikimedia.org/wikipedia/commons/5/53/Wikipedia-logo-en-big.png"; http.onReceive = (ubyte[] data) { return data.length; }; http.onProgress = (size_t dltotal, size_t dlnow, size_t ultotal, size_t ulnow) { writeln("Progress ", dltotal, ", ", dlnow, ", ", ultotal, ", ", ulnow); return 0; }; http.perform(); }This snippet is showing Download Progress in bytes, but I'm unsure how to save the downloaded file into filesystem after download is completed.
Aug 20 2019
On Tue, Aug 20, 2019 at 1:46 PM Daniel Kozak <kozzi11 gmail.com> wrote:On Tue, Aug 20, 2019 at 1:40 PM BoQsc via Digitalmars-d-learn <digitalmars-d-learn puremagic.com> wrote:For that you can use https://dlang.org/phobos/std_file#appendHello everyone, I found this snippet on https://dlang.org/phobos/std_net_curl.html#.HTTPYou just need to save data in onReceive callbackimport std.net.curl : HTTP; import std.stdio : writeln; void main() { auto http = HTTP(); // Track progress http.method = HTTP.Method.get; http.url = "https://upload.wikimedia.org/wikipedia/commons/5/53/Wikipedia-logo-en-big.png"; http.onReceive = (ubyte[] data) { return data.length; }; http.onProgress = (size_t dltotal, size_t dlnow, size_t ultotal, size_t ulnow) { writeln("Progress ", dltotal, ", ", dlnow, ", ", ultotal, ", ", ulnow); return 0; }; http.perform(); }This snippet is showing Download Progress in bytes, but I'm unsure how to save the downloaded file into filesystem after download is completed.
Aug 20 2019
On Tuesday, 20 August 2019 at 11:51:03 UTC, Daniel Kozak wrote:For that you can use https://dlang.org/phobos/std_file#appendThank you, seems to work.import std.net.curl : HTTP; import std.stdio : writeln; import std.file : append; void main() { auto http = HTTP(); // Track progress http.method = HTTP.Method.get; http.url = "https://upload.wikimedia.org/wikipedia/commons/5/53/Wikipedia-logo-en-big.png"; http.onReceive = (ubyte[] data) { append("Wikipedia-logo-en-big.png", data); return data.length; }; http.onProgress = (size_t dltotal, size_t dlnow, size_t ultotal, size_t ulnow) { writeln("Progress ", dltotal, ", ", dlnow, ", ", ultotal, ", ", ulnow); return 0; }; http.perform(); }
Aug 20 2019
On Tuesday, 20 August 2019 at 11:51:03 UTC, Daniel Kozak wrote:For that you can use https://dlang.org/phobos/std_file#appendDon't do that. It will reopen and close the file on every received chunk. Not only is it slow, but if the file is renamed/moved/deleted while the download is occurring, the file will be corrupted. The same will happen if you run the program twice, if you don't clean up. The correct way is to open a File once, then use rawWrite for every received chunk.
Aug 20 2019
On Tue, Aug 20, 2019 at 1:40 PM BoQsc via Digitalmars-d-learn <digitalmars-d-learn puremagic.com> wrote:Hello everyone, I found this snippet on https://dlang.org/phobos/std_net_curl.html#.HTTPYou just need to save data in onReceive callbackimport std.net.curl : HTTP; import std.stdio : writeln; void main() { auto http = HTTP(); // Track progress http.method = HTTP.Method.get; http.url = "https://upload.wikimedia.org/wikipedia/commons/5/53/Wikipedia-logo-en-big.png"; http.onReceive = (ubyte[] data) { return data.length; }; http.onProgress = (size_t dltotal, size_t dlnow, size_t ultotal, size_t ulnow) { writeln("Progress ", dltotal, ", ", dlnow, ", ", ultotal, ", ", ulnow); return 0; }; http.perform(); }This snippet is showing Download Progress in bytes, but I'm unsure how to save the downloaded file into filesystem after download is completed.
Aug 20 2019