ОБНОВЛЕНИЕ : начиная с Tornado 3, используйте встроенный StaticFileHandler .
Tornado не предназначен для обслуживания статических файлов. Если это приведет к загрузке, вы должны использовать nginx или что-то в этом роде. А если нет, возможно, будет проще использовать SimpleHTTPServer
.
Тем не менее написать тривиально:
import os.path
import mimetypes
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
class FileHandler(tornado.web.RequestHandler):
def get(self, path):
if not path:
path = 'index.html'
if not os.path.exists(path):
raise tornado.web.HTTPError(404)
mime_type = mimetypes.guess_type(path)
self.set_header("Content-Type", mime_type[0] or 'text/plain')
outfile = open(path)
for line in outfile:
self.write(line)
self.finish()
def main():
tornado.options.enable_pretty_logging()
application = tornado.web.Application([
(r"/(.*)", FileHandler),
])
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(8888)
tornado.ioloop.IOLoop.instance().start()
if __name__ == "__main__":
main()
Это только для начала; если вы собираетесь его использовать, вы должны убедиться, что не можете пройтись по файловой системе и получить доступ к любому файлу. Кроме того, скрипт в настоящее время обслуживает себя, что немного странно.