Как с 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);
}