gpt4 book ai didi

javascript - 使用 gjs,如何发出异步 http 请求来分块下载文件?

转载 作者:数据小太阳 更新时间:2023-10-29 03:53:41 25 4
gpt4 key购买 nike

我开始开发我的第一个 JavaScript GTK 应用程序,我想下载一个文件并使用 Gtk.ProgressBar 跟踪它的进度。我能找到的关于 http 请求的唯一文档是这里的一些示例代码:

http://developer.gnome.org/gnome-devel-demos/unstable/weatherGeonames.js.html.en

这里还有一些令人困惑的 Soup 引用:

http://www.roojs.org/seed/gir-1.2-gtk-3.0/gjs/Soup.SessionAsync.html

据我所知,我可以做这样的事情:

const Soup = imports.gi.Soup;

var _httpSession = new Soup.SessionAsync();
Soup.Session.prototype.add_feature.call(_httpSession, new Soup.ProxyResolverDefault());

var request = Soup.Message.new('GET', url);
_httpSession.queue_message(request, function(_httpSession, message) {
print('download is done');
}

似乎只有下载完成时的回调,我找不到任何方法来为任何数据事件设置回调函数。我该怎么做?

这在 node.js 中非常简单:

var req = http.request(url, function(res){
console.log('download starting');
res.on('data', function(chunk) {
console.log('got a chunk of '+chunk.length+' bytes');
});
});
req.end();

最佳答案

感谢 javascript-list@gnome.org 的帮助,我已经弄明白了。事实证明,Soup.Message 具有您可以绑定(bind)的事件,包括一个名为 got_chunk 和一个名为 got_headers 的事件。

const Soup = imports.gi.Soup;
const Lang = imports.lang;

var _httpSession = new Soup.SessionAsync();
Soup.Session.prototype.add_feature.call(_httpSession, new Soup.ProxyResolverDefault());

// variables for the progress bar
var total_size;
var bytes_so_far = 0;

// create an http message
var request = Soup.Message.new('GET', url);

// got_headers event
request.connect('got_headers', Lang.bind(this, function(message){
total_size = message.response_headers.get_content_length()
}));

// got_chunk event
request.connect('got_chunk', Lang.bind(this, function(message, chunk){
bytes_so_far += chunk.length;

if(total_size) {
let fraction = bytes_so_far / total_size;
let percent = Math.floor(fraction * 100);
print("Download "+percent+"% done ("+bytes_so_far+" / "+total_size+" bytes)");
}
}));

// queue the http request
_httpSession.queue_message(request, function(_httpSession, message) {
print('Download is done');
});

关于javascript - 使用 gjs,如何发出异步 http 请求来分块下载文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14806981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com