How Can Tornado Serve A Single Static File At An Arbitrary Location?
Solution 1:
StaticFileHandler expects two arguments, so if you want a single url (/foo.json) to be mapped to your file path you can use:
app = tornado.web.Application([
(r'/foo.json()', tornado.web.StaticFileHandler, {'path': '/path/to/foo.json'})
])
The regex will match /foo.json
and send the empty capture group ()
, which will cause the filepath to be used as is. When the capture group is not empty, /path/to/foo.json
will be treated as a directory /path/to/foo.json/
, and the handler will try to match whatever is within the capture group to a file name in that directory.
Solution 2:
Something like this should work:
import os
import tornado.ioloop
import tornado.web
classMyFileHandler(tornado.web.StaticFileHandler):
definitialize(self, path):
self.dirname, self.filename = os.path.split(path)
super(MyFileHandler, self).initialize(self.dirname)
defget(self, path=None, include_body=True):
# Ignore 'path'.super(MyFileHandler, self).get(self.filename, include_body)
app = tornado.web.Application([
(r'/foo\.json', MyFileHandler, {'path': '/path/to/foo.json'})
])
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
The URL pattern and the filename need not be related, you could do this and it would work just as well:
app = tornado.web.Application([
(r'/jesse\.txt', MyFileHandler, {'path': '/path/to/foo.json'})
])
Solution 3:
StaticFileHandler gets is file name from the regex capturing group and the directory name from its path argument. It will work if you use /path/to/
as the path:
(r'/(foo\.json)', tornado.web.StaticFileHandler, {'path': '/path/to/'})
StaticFileHandler is designed for cases where URLs and filenames match; if you can't arrange to have this file available on disk under the same name you want to serve it as you'll have to use a custom handler.
Post a Comment for "How Can Tornado Serve A Single Static File At An Arbitrary Location?"