server.py 文件源码

python
阅读 25 收藏 0 点赞 0 评论 0

项目:micropayment-storage 作者: mitchoneill 项目源码 文件源码
def files_get(path):
    """
    getattr(path) -> GET /files/<path>?op=getattr
        200     {"st_mode": <mode int>, "st_size": <size int>}
        404     Not Found

    readdir(path) -> GET /files/<path>?op=readdir
        200     {"files": ["<file str>", ... ]}
        404     Not Found

    read(path, size, offset) -> GET /files/<path>?op=read&size=<size>&offset=<offset>
        200     "<base64 str>"
        404     Not Found
    """
    if 'op' not in flask.request.args:
        return 'Missing operation.', 400

    op = flask.request.args['op']

    if path == "/":
        path = app.config['serve_dir']
    else:
        path = flask.safe_join(app.config['serve_dir'], path)

    if op == 'getattr':
        try:
            info = os.stat(path)
            return flask.jsonify({'st_mode': info.st_mode, 'st_size': info.st_size})
        except FileNotFoundError:
            return 'File not found.', 404
    elif op == 'readdir':
        try:
            return flask.jsonify({"files": os.listdir(path)})
        except FileNotFoundError:
            return 'File not found.', 404
    elif op == 'read':
        if 'size' not in flask.request.args:
            return 'Missing size.', 400
        elif 'offset' not in flask.request.args:
            return 'Missing offset.', 400

        size = int(flask.request.args['size'])
        offset = int(flask.request.args['offset'])

        # Open, seek, read, close
        try:
            fd = os.open(path, os.O_RDONLY)
            os.lseek(fd, offset, os.SEEK_SET)
            buf = os.read(fd, size)
            os.close(fd)
        except FileNotFoundError:
            return 'File not found.', 404

        return flask.jsonify({"data": base64.b64encode(buf).decode()})

    return 'Unknown operation.', 400
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号