简单的图像服务器

12 投票
3 回答
18047 浏览
提问于 2025-04-15 20:32

我有一堆图片需要让别人通过网页浏览,方式跟Apache-Gallery差不多。

我可以把所有图片放在一个文件夹里,这样用户访问:

http://server:port/directory

就能看到小缩略图,点击一张图片就能在新页面全屏显示,并且可以选择浏览前一张或下一张图片。

我想找一个非Apache的解决方案,类似于很棒的Python简单HTTP服务器,可以在任何地方启动,配置简单,比如:

python -m SimpleHTTPServer 8000

其实,上面的Python解决方案基本上就是我想要的,只是它没有生成缩略图,而只是简单地列出了文件夹里的内容。

我很乐意使用任何常见语言写的应用程序,只要它是自包含的,并且可以在Linux上运行在自定义端口上(再强调一下,不是Apache模块)。

更新

我刚找到一个叫curator的Python脚本,运行起来很简单。它可以从你指定的文件夹里的图片生成所需的缩略图和静态HTML,然后你可以用SimpleHttpServer来展示这些结果。

3 个回答

4

虽然这个cgi-bin脚本没有使用SimpleHTTPServer类,但它展示了如何非常简单地显示图片。你可以根据自己的需要进行扩展。源代码在这里。

from os import listdir
from random import choice

ext2conttype = {"jpg": "image/jpeg",
                "jpeg": "image/jpeg",
                "png": "image/png",
                "gif": "image/gif"}

def content_type(filename):
    return ext2conttype[filename[filename.rfind(".")+1:].lower()]

def isimage(filename):
    """true if the filename's extension is in the content-type lookup"""
    filename = filename.lower()
    return filename[filename.rfind(".")+1:] in ext2conttype

def random_file(dir):
    """returns the filename of a randomly chosen image in dir"""
    images = [f for f in listdir(dir) if isimage(f)]
    return choice(images)

if __name__ == "__main__":
    dir = "c:\\python\\random_img\\"
    r = random_file(dir)
    print "Content-type: %s\n" % (content_type(r))
    print file(dir+r, "rb").read()
14

这件事发生在很久以前,不过我刚刚开始了一个叫做 imageMe 的项目,正好满足这个需求。你可以按照网站上的说明进行设置,但如果你只是想展示你当前位置及其下方的图片画廊,可以使用下面这个命令,它会在8000端口运行:

curl https://raw.githubusercontent.com/unwitting/imageme/master/imageme.py | python

希望这能帮助到其他有同样问题的人!

7

感谢大家的回答和评论。我最后采用的解决方案是这样的:

  1. 在存放我所有图片的文件夹里运行curator。这个操作会生成缩略图和一个索引页面,还会为所有大图创建分页。
  2. 在同一个文件夹里运行 "*python -m SimpleHTTPServer 8000*",这样就可以浏览curator生成的html页面了。

所以这其实是一个简单的两步操作,基本上满足了我最初的需求。

撰写回答