def render_GET(self, request): log.debug("request from %s: %s" % (self.userid, request.args)) if "f" in request.args: fn = request.args["f"][0] info = self.fileserver.storage.get(fn, False) if info: filename, mime, md5sum = info log.debug("sending file type %s, path %s, md5sum %s" % (mime, filename, md5sum)) genfilename = util.generate_filename(mime) request.setHeader("content-type", mime) request.setHeader("content-length", os.path.getsize(filename)) request.setHeader("content-disposition", 'attachment; filename="%s"' % (genfilename)) request.setHeader("x-md5sum", md5sum) # stream file to the client fp = open(filename, "rb") d = FileSender().beginFileTransfer(fp, request) def finished(ignored): fp.close() request.finish() d.addErrback(log.error).addCallback(finished) return server.NOT_DONE_YET # file not found in extra storage else: return self._quick_response(request, 404, "not found") return self._quick_response(request, 400, "bad request")
def render_GET(self, request): log.debug("request from %s: %s" % (self.userid, request.args)) if 'f' in request.args: fn = request.args['f'][0] info = self.fileserver.storage.get(fn, False) if info: filename, mime, md5sum = info log.debug("sending file type %s, path %s, md5sum %s" % (mime, filename, md5sum)) genfilename = util.generate_filename(mime) request.setHeader('content-type', mime) request.setHeader('content-length', os.path.getsize(filename)) request.setHeader('content-disposition', 'attachment; filename="%s"' % (genfilename)) request.setHeader('x-md5sum', md5sum) # stream file to the client fp = open(filename, 'rb') d = FileSender().beginFileTransfer(fp, request) def finished(ignored): fp.close() request.finish() d.addErrback(log.error).addCallback(finished) return server.NOT_DONE_YET # file not found in extra storage else: return self._quick_response(request, 404, 'not found') return self._quick_response(request, 400, 'bad request')
def test_generate_filename(self): mimes = { 'image/png': 'png', 'image/jpeg': 'jpg', 'image/gif': 'gif', 'text/x-vcard': 'vcf', 'text/vcard': 'vcf', 'text/plain': 'txt', 'audio/3gpp': '3gp', 'audio/mpeg': 'mp3', } for mime, ext in mimes.iteritems(): filename = util.generate_filename(mime) self.assertRegexpMatches(filename, 'att[A-Za-z0-9]+\.' + ext)