コード例 #1
0
ファイル: uploader.py プロジェクト: alum/uploader
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>"
    )
コード例 #2
0
ファイル: uploader.py プロジェクト: alum/uploader
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)
コード例 #3
0
ファイル: filehelper.py プロジェクト: alum/uploader
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
コード例 #4
0
ファイル: filehelper.py プロジェクト: alum/uploader
def get_metadata(filename):
    path = config.get_upload_path() + filename + '.metadata'
    f = open(path, 'r')
    return pickle.loads(f.read())
    f.close()