在lua中通过url下载文件(Download file by url in lua)

Lua初学者在这里。 :)

我正在尝试通过url加载文件,不知何故,我太愚蠢了,无法在此处获取所有代码示例,以便为我工作。

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

从给定的URL下载和存储文件到lua中的给定路径

socket = require("socket")
http = require("socket.http")
ltn12 = require("ltn12")

local file = ltn12.sink.file(io.open('test.jpg', 'w'))
http.request {
    url = 'http://pbs.twimg.com/media/CCROQ8vUEAEgFke.jpg',
    sink = file,
}

我的程序运行20 - 30s,之后没有保存。 有一个创建的test.jpg但它是空的。 我也尝试将w + b添加到io.open()第二个参数但是没有用。


Lua beginner here. :)

I am trying to load a file by url and somehow I am just too stupid to get all the code samples here on SO to work for me.

How to download a file in Lua, but write to a local file as it works

downloading and storing files from given url to given path in lua

socket = require("socket")
http = require("socket.http")
ltn12 = require("ltn12")

local file = ltn12.sink.file(io.open('test.jpg', 'w'))
http.request {
    url = 'http://pbs.twimg.com/media/CCROQ8vUEAEgFke.jpg',
    sink = file,
}

my program runs for 20 - 30s and afterwards nothing is saved. There is a created test.jpg but it is empty. I also tried to add w+b to the io.open() second parameter but did not work.


原文:https://stackoverflow.com/questions/29654194
2021-01-13 10:01

满意答案

以下作品:

-- retrieve the content of a URL
local http = require("socket.http")
local body, code = http.request("http://pbs.twimg.com/media/CCROQ8vUEAEgFke.jpg")
if not body then error(code) end

-- save the content to a file
local f = assert(io.open('test.jpg', 'wb')) -- open in "binary" mode
f:write(body)
f:close()

你的剧本也适合我; 如果无法访问URL,则该文件可能为空(在此情况下,我发布的脚本将返回错误)。


The following works:

-- retrieve the content of a URL
local http = require("socket.http")
local body, code = http.request("http://pbs.twimg.com/media/CCROQ8vUEAEgFke.jpg")
if not body then error(code) end

-- save the content to a file
local f = assert(io.open('test.jpg', 'wb')) -- open in "binary" mode
f:write(body)
f:close()

The script you have works for me as well; the file may be empty if the URL can't be accessed (the script I posted will return an error in this case).

相关问答

更多

使用Lua从URL获取文件名(Get file name from URL using Lua)

尝试这个: local str = "https://thisisarandomsite.com/some_dir/src/blah/blah/7fd34a0945b036685bbd6cc2583a5c30.jpg" local name = str:match( "([^/]+)$" ) 您可以从本指南中自定义匹配模式。 Try this: local str = "https://thisisarandomsite.com/some_dir/src/blah/blah/7fd34a0945...

如何在Lua中解析xml文件?(How to parse xml file in Lua?)

好吧,在尝试使用各种xml库之后,为我工作的那个是xmlreader 。 $ sudo luarocks install lua-xmlreader 然后,根据xmlreader文档: require('xmlreader') fhandle = io.open("temp.xml", 'r') data = fhandle:read("*a") local r = assert(xmlreader.from_string(data)) while (r:read()) do local ...

C ++ Lua从Lua表中获取价值(C++ Lua Getting Value From Lua Table)

将%i更改为%g 。 lua_tonumber返回一个float或double,而不是int。 Change %i to %g. lua_tonumber returns a float or double, not an int.

在Lua中只做一次文件(Do file only once in Lua)

好吧, require这么做。 require "file" -- runs "file.lua" require "file" -- does not run the "file" again well, require pretty much does that. require "file" -- runs "file.lua" require "file" -- does not run the "file" again

在Nginx上使用Lua重定向到相同的URL(openresty setup)(Redirect to same URL with Lua on Nginx (openresty setup))

从重定向方法文档 : 请注意,此方法调用将终止当前请求的处理 ,并且必须在ngx.send_headers或ngx.print或ngx.say的显式响应正文输出之前调用它。 因此,检查或使用另一个请求阶段处理程序,如rewrite_by_lua 。 至于设置标题,请使用ngx.header 例如: location /testRedirect { content_by_lua ' ngx.header["My-header"]= "foo" return ngx.redi...

无法从java中的URL下载文件(Cannot download file from URL in java)

你丢失了每个备用byte while (fileIn.read() != -1) { //1st read fileOut.write(fileIn.read()); //2nd read - 1st write } 你正在读两次,只写一次。 你需要做的是 int x; while ((x = fileIn.read()) != -1) { //1st read fileOut.write(x); //1...

如何从Lua中的url获取文件大小?(How to get file size from url in Lua?)

function get_resource_size(url) local pipe = io.popen('wget -S --spider --no-check-certificate "'..url..'" 2>&1') local size = pipe:read"*a":match"Content%-Length: (%d+)" pipe:close() return size and tonumber(size) end print(get_resource_...

在lua中通过url下载文件(Download file by url in lua)

以下作品: -- retrieve the content of a URL local http = require("socket.http") local body, code = http.request("http://pbs.twimg.com/media/CCROQ8vUEAEgFke.jpg") if not body then error(code) end -- save the content to a file local f = assert(io.open('test...

在Lua中下载文件的最简单方法(Easiest way to download a file in Lua)

添加类似(未经测试)的内容: local imageresp = http:request({ method = "get", url = url_from_decoded_json, }); local imagefile = io.open("some_file", "w") imagefile:write(resp.content) imagefile:close() 到你的脚本结束。 Add something like (untested): local image...

如何让lua加载另一个lua脚本?(How to let lua load another lua script?)

正如Lua要求的man页面所描述的 ,它在路径中搜索文件。 这个路径可以在C中定义。看看这篇文章: “从C ++ / C设置全局LUA_PATH变量” require函数非常实用,可以加载.lua文件中定义的模块和库。 As decribed by the Lua require man page, it searches for the file in a path. This path can be defined in C. Have a look to this post : "Setti...

相关文章

更多

solr 通过URL删除索引

使用:update 参数:stream.body=<delete><query&gt ...

PHP 中dirname(_file_)

PHP 中dirname(_file_) 2007-5-3 16:00|查看: 19256|评论: ...

shell 脚本执行,出现错误bad interpreter: No such file or directory

出现bad interpreter:No such file or directory的原因 是文件格 ...

最新问答

更多

在循环中组合来自单独表的点(Combine points from separate tables in a loop)

试试这个查询: SELECT m.id, m.title, sum(if(aw.film_nominated = 1,a.nom_points,0)) AS total_nom_points, sum(if(aw.film_won = 1,a.win_points,0)) AS total_win_points, sum(if(aw.film_nominated = 1,a.nom_points,0))

如何将域本体与WordNet同义词链接?(How to link a domain ontology with WordNet synsets?)

据我所知,没有适用于Protégé4.3或更高版本的插件。 (我查看了WordNet普林斯顿相关项目页面,Ontoling是一个有人创建的插件,但它只适用于Protégé3.2)。 你可能不得不诉诸 1)回归到更古老的Protégé版本。 2)使用Java(或您首选的编程语言)api for wordnet(如JAWS)以及基于本体框架的Java(再次偏好)(如OWL API或Apache Jena)来创建这些链接。 3)自己为WordNet写一个Protégé插件! As far as I k

在WPF C#中的ListView中将项目拖放到特定索引中(Drop Item into Specific Index in ListView in WPF C#)

WPF并不是真的被设计成以这种方式使用。 虽然你可以强力将ListViewItem直接添加到ListView,但它真正应该工作的方式是你有一些类型的集合( ObservableCollection可以正常工作)并将ListView的ItemsSource属性绑定到该集合。 那么答案很简单。 您可以使用带有索引的集合的Insert方法,而不是Add方法。 至于找到鼠标事件发生的ListViewItem,可以使用VisualTreeHelper.HitTest方法。 WPF is

Swift未声明的类型和构建设置(Swift undeclared type and build settings)

在ViewController.Swift放入以下语句 import calendarView 编辑: 请确保在目标的构建设置中正确设置Library Search Path ,如下所示。 路径应该与您的.xcodeproj文件相关。 Put following statement in your ViewController.Swift import calendarView Edit: Please ensure to set Library Search Path correctly

React Material UI - 导出多个高阶组件(React Material UI - Export multiple higher order components)

看看它在material-ui文档站点中的处理方式,特别是在AppFrame组件中: export default compose( withStyles(styles, { name: 'AppFrame', }), withWidth(), connect(), )(AppFrame); 他们正在使用重组来执行此操作。 所以在你的情况下,这将是: import React, { Component } from 'react'; import compose fro

PHP Post自动登录登录(PHP Post Automatic login Login)

当您在该站点上时,您将登录并在此之后转到所需的页面。 该网站允许您到达那里,因为他们通常有一个存储您的数据的会话。 因此,基本上您需要基于cURL模拟系统中的会话。 如果您认为会话的工作原理,您会发现您很可能需要接受cookie,其中该站点将存储会话ID。 所以这也是你需要用cURL做的。 你需要给它一个存储cookie的方法。 所以你可以像这样使用curl_setopt函数: curl_setopt($ch, CURLOPT_COOKIEJAR, '/path/to/cookie.txt');

Git for Windows,将GIT_SSH设置为shell文件会导致“错误:无法生成:没有这样的文件或目录”(Git for Windows, setting GIT_SSH to a shell file causes causes “error: cannot spawn : No such file or directory”)

由于一些完全无法解释的原因,我可以验证它现在在cmd和git bash中都有效,而之前没有。 现在开始为ssh创建一个git-repo预处理器,这样多账户用户就可以更轻松了。 For some totally unexplained reason, I can verify that NOW it works in both cmd and git bash whilst it didn't before. Now on to creating a git-repo preprocessor f

从php代码安装debian驱动器(Mounting a drive in debian from php code)

我有一个疯狂的想法...... 您可以将cron设置为以root身份运行,以检查脚本中的mount命令。 该脚本只需设置要处理的mount命令,当cron到达它时,运行mount,将命令标记为已处理,然后写入日志文件,然后可以显示该日志文件。 I have a wild idea... You could set a cron to run as root that checks for mount commands from your script. The script would simp

使用XCUIApplication和覆盖窗口的OSX UI测试(OSX UI testing with XCUIApplication and covered windows)

要点击某个特定窗口之前,请执行以下操作。 [[[XCUIApplication alloc] init].windows[@"Window"] click]; To focus a specific window before clicking something inside it, do the following. [[[XCUIApplication alloc] init].windows[@"Window"] click];

计时器环绕灵活的位大小(Timer wraparound with flexible bit sizes)

您可以向上乘以而不是符号扩展,以使整个范围与算术类型的大小相同。 换句话说,使用定点算术来填充整数。 在你的情况下,用uint32_t ,看起来像 uint32_t start = GetSomePlatformSpecificTimer(); RunSomeOtherCode(); uint32_t end = GetSomePlatformSpecificTimer(); start <<= 32-COUNTER_WIDTH; end <<= 32-COUNTER_WIDTH; uint32