你如何使用 Vala 通过 HTTP 下载文件?

How do you download files over HTTP with Vala?

我试图将 libsoup-2.4 与 https://valadoc.org/libsoup-2.4/Soup.RequestFile.html

一起使用

但是 RequestFile 的创建受到保护,我看不到 returns 该对象或继承 RequestFile 的对象的任何操作。

以下有效,但我想知道是否有更短或更好的方法,无论是使用同一个库还是其他库。

// Where url is a string containing the file location (https://...)
Soup.Request request = session.request (url);
InputStream stream = request.send ();

// Create the file
File file = File.new_for_path ("Example File.zip");
FileOutputStream os = file.create (FileCreateFlags.REPLACE_DESTINATION);

// Write bytes to the file
os.splice (stream, OutputStreamSpliceFlags.CLOSE_TARGET);

是的,使用 gio-2.0 可以更轻松地完成此操作。只需通过 URL 打开第一个文件,在本地打开第二个文件,然后将第一个文件复制到第二个文件。以下示例下载此 html 页面的代码。

void main () {
    var file_from_http = File.new_for_uri ("");
    File local_file = File.new_for_path("./Whosebug.html");
    file_from_http.copy(local_file, FileCopyFlags.OVERWRITE);
}