Skip to content

Instantly share code, notes, and snippets.

@perusio
Created March 20, 2012 09:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save perusio/2133228 to your computer and use it in GitHub Desktop.
Save perusio/2133228 to your computer and use it in GitHub Desktop.
Get the size of an image file using Nginx Embedded Lua module
## Get the size of the image file using Lua.
## Cf. http://wiki.nginx.org/HttpLuaModule#set_by_lua.
location ~* \.(?:gif|jpe?g|png)$ {
set_by_lua $img_file_size '
function fsize (file)
local current = file:seek() -- get current position
local size = file:seek("end") -- get file size
file:seek("set", current) -- restore position
return size
end
fsize(ngx.var.request_filename)';
}
@kslr
Copy link

kslr commented Dec 22, 2018

thanks

@anthumchris
Copy link

That gave me error failed to run set_by_lua*: set_by_lua:3: attempt to call method 'seek' (a nil value), and I fixed by using this:

set_by_lua $file_size '
  function fsize (file_name)
    local file = assert(io.open(file_name, "r"))   -- open file
    local current = file:seek()                    -- get current position
    local size = file:seek("end")                  -- get file size
    file:seek("set", current)                      -- restore position
    assert(file:close())                           -- close file
    return size
  end
  return fsize(ngx.var.request_filename);
';

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment