如何在Lua中下载文件,但在工作时写入本地文件

如何在Lua中下载文件,但在工作时写入本地文件,lua,download,luasocket,Lua,Download,Luasocket,我正在尝试制作一个更新程序,这样当我的Lua应用程序过期时,它将使用LuaSocket下载更新的.exe文件(可以运行我的Lua代码) 在这个更新程序中,我想让它显示到目前为止下载了多少。但是,通过以下HTTP请求,它会阻止应用程序,直到完全下载: local b, c, h = http.request("https://www.example.com/Download/Example.exe?from="..Game.Version) 我正在使用线程下载它,但是在线程内部完成下载之前,我仍

我正在尝试制作一个更新程序,这样当我的Lua应用程序过期时,它将使用LuaSocket下载更新的.exe文件(可以运行我的Lua代码)

在这个更新程序中,我想让它显示到目前为止下载了多少。但是,通过以下HTTP请求,它会阻止应用程序,直到完全下载:

local b, c, h = http.request("https://www.example.com/Download/Example.exe?from="..Game.Version)
我正在使用线程下载它,但是在线程内部完成下载之前,我仍然无法写入文件,因此进度条将变为0%,100%,中间没有任何内容

我是否可以下载远程文件,但在下载时将其保存到本地文件


cURL可以做到这一点。我不知道LuaSocket或Lua的其他东西是否可以:(

你说得对-cURL可以做到。LuaSocket没有此功能。你可以创建一个LTN12接收器,它将报告所取得的进展,但在完全下载文件之前,你不知道文件的总大小,因此它是没有用的。为什么不改用它呢


通过发出HEAD请求并从Content-Length头获取文件大小,可以避免对cURL的依赖:

require "socket.http"

local resp, stat, hdr = socket.http.request{
  url     = "http://www.lua.org/ftp/lua-5.2.1.tar.gz",
  method  = "HEAD",
}

print(hdr["content-length"])
-- 249882

也就是说,如果这就是您使用LuaSocket的全部目的,那么cURL可以说是一个更好的选择。

可能的重复,以及[LuaSocket的问题]().@SatheeshJM这两个问题都不是我要问的。贝利,请投票选出正确答案,并接受它——@Michal这也为我回答了一些问题,谢谢。+1@Michal Kottman你知道这为什么不适用于youtube链接吗?没有错误。5-7秒后不会发生任何事情。进度也只打印了2行,但只打印了w输入提供的url和0以获取进度。
require "socket.http"

local resp, stat, hdr = socket.http.request{
  url     = "http://www.lua.org/ftp/lua-5.2.1.tar.gz",
  method  = "HEAD",
}

print(hdr["content-length"])
-- 249882