def upload(request): if request.method != "POST": return not_found() if "sessionid" not in request.args: return Response("You must submit a sessionid for your upload.") sessionid = request.args["sessionid"] filename = filehelper.get_filename(config.get_upload_path()) session.set(sessionid, {"progress": 0, "upload_status": "uploading", "url": "", "filename": filename}) request.environ["wsgi.input"] = StreamWrapper( request.environ["wsgi.input"], request.environ["CONTENT_LENGTH"], sessionid ) # Save the file locally f = request.files["file"] path = config.get_upload_path() + filename f.save(path) f.close() filehelper.save_metadata(filename, {"title": f.filename, "description": ""}) session.set( sessionid, { "progress": 100, "upload_status": "complete", "url": request.host_url + "file/" + filename, "filename": filename, }, ) return Response( "<!DOCTYPE html><html><head></head><body>\ <p>Upload OK</p></body>" )
def get_file(request, filename): filename = filehelper.safe_filename(filename) try: f = open(config.get_upload_path() + filename, "r") except IOError: return not_found(request) file_iterator = wrap_file(request.environ, f) try: metadata = filehelper.get_metadata(filename) title = metadata["title"] except: title = filename headers = Headers() headers.add("Content-Type", "application/octet-stream") headers.add("Content-Disposition", "attachment", filename=title) headers.add("Content-Length", os.fstat(f.fileno()).st_size) return Response(response=file_iterator, headers=headers)
def save_metadata(filename, params): path = config.get_upload_path() + filename + '.metadata' if not os.path.exists(path): f = open(path, 'w+') f.write(pickle.dumps(params)) f.close() return params else: f = open(path, 'r+') data = f.read() obj = pickle.loads(data) f.close() for k, v in params.iteritems(): obj[k] = v f = open(path, 'w') f.write(pickle.dumps(obj)) f.close() return obj
def get_metadata(filename): path = config.get_upload_path() + filename + '.metadata' f = open(path, 'r') return pickle.loads(f.read()) f.close()