1

我尝试将 libsoup-2.4 与https://valadoc.org/libsoup-2.4/Soup.RequestFile.html一起使用

但是 RequestFile 的创建受到保护,我看不到任何返回该对象或继承 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);
4

1 回答 1

2

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

void main () {
    var file_from_http = File.new_for_uri ("https://stackoverflow.com/questions/61021171/how-do-you-download-files-over-http-with-vala");
    File local_file = File.new_for_path("./stackoverflow.html");
    file_from_http.copy(local_file, FileCopyFlags.OVERWRITE);
}
于 2020-04-04T00:27:15.580 回答