randy-ran
10/28/2014 - 3:47 AM

[下载文件] 读取文件然后下载 #torando

[下载文件] 读取文件然后下载 #torando

class AdminFileHandler(BaseHandler):
    
    @authenticated
    def get(self, file_name):
        _file_dir = os.path.abspath("")+"/my/path/downloads"
        _file_path = "%s/%s" % (_file_dir, file_name)
        if not file_name or not os.path.exists(_file_path):
            raise HTTPError(404)
        self.set_header('Content-Type', 'application/force-download')
        self.set_header('Content-Disposition', 'attachment; filename=%s' % file_name)    
        with open(_file_path, "rb") as f:
            try:
                while True:
                    _buffer = f.read(4096)
                    if _buffer:
                        self.write(_buffer)
                    else:
                        f.close()
                        self.finish()
                        return
            except:
                raise HTTPError(404)
        raise HTTPError(500)