Как с Vala загружать файлы по HTTP?

Я попытался использовать 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);

1 ответ

Решение

Да, с gio-2.0 это можно сделать проще. Просто откройте первый файл по URL-адресу, второй файл локально и скопируйте первый во второй. В следующем примере загружается код этой html-страницы.

void main () {
    var file_from_http = File.new_for_uri ("https://stackru.com/questions/61021171/how-do-you-download-files-over-http-with-vala");
    File local_file = File.new_for_path("./stackru.html");
    file_from_http.copy(local_file, FileCopyFlags.OVERWRITE);
}
Другие вопросы по тегам