Пример #1
0
    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")
Пример #2
0
    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')
Пример #3
0
 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)
Пример #4
0
 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)