Flask上传下载文件:uploads and downloads

uploads and downloads

uploads

python:3.6 flask:1.0.2

UPLOAD_PATH = "/users/alex/desktop/static/uploads"
DOWNLOAD_PATH = "/users/alex/desktop/static/downloads"

# post 
def upload_file(*args, **kwargs):
    """
    上传文件,兼写入库
    :return: 
    """
    file = request.files["file"]
    if not file:
        result = formalReturn(40002, 'file can\'t be null', data=None)

    if not file.filename.endswith("json"):
        result = formalReturn(40002, 'file name must be json', data=None)

    if file:
        # 上传文件路径不存在就创建
        upload_path = UPLOAD_PATH
        if not os.path.exists(upload_path):
            os.makedirs(upload_path)

        # file.save() 时候确保汉字路径被保存
        file_path = os.path.join(upload_path, file.filename)
        if isinstance(file_path, bytes):
            file_path = file_path.decode("utf-8")

        try:
            file.save(file_path) #保存到服务器位置
        except Exception as e:
            result = formalReturn(404, 'upload failed', data=str(e))
            return jsonify(result), 200

        file_name = file.filename
        file_path = file_path
        file_size = os.path.getsize(file_path)  # 单位字节/1024
        pre_name = file_name.split(".")[0] # 去掉后缀格式的文件名

        try:
            pass # 保存字段到数据库
            result = formalReturn(201, 'upload success', data=None)
            return jsonify(result), 201
        except mongoengine.NotUniqueError as e:
            result = formalReturn(40001, 'file already exists', data=str(e))
        except Exception as e:
            result = formalReturn(40004, 'unexpected error', data=str(e))
    else:
        result = formalReturn(404, 'please upload json file', data=None)
    return jsonify(result), 200    

 

downloads

python:3.6 flask:1.0.2

from flask import Flask, jsonify, request, abort
from flask import send_file, send_from_directory

# get methods def export_file_for_pick(*args, **kwargs): """ :param args: :param kwargs: :return: """ task_id = request.args.get("task_id") image_picks = ImagePick.objects.filter(task_id=task_id) filename = "export_pick_{task_id}.json".format(task_id=task_id) download_path = DOWNLOAD_PATH if not os.path.exists(download_path): os.makedirs(download_path, 0o777) filepath = os.path.join(download_path, filename) print(filepath) with open(filepath, "w", encoding="utf-8") as f: for pick in image_picks: pick_item = {} image_id = pick.image_id pick_tag = pick.pick_tag status = pick.status image = Image.objects.filter(image_id=image_id).first() url = image.url pick_item["image_id"] = image_id pick_item["url"] = url if pick_tag: pick_item["pick_tag"] = pick_tag else: pick_item["pick_tag"] = "" pick_item["status"] = status f.write(json.dumps(pick_item, ensure_ascii=False) + "\n") try: directory, filename = os.path.split(filepath) return send_from_directory(directory, filename, as_attachment=True) except Exception as e: return jsonify({"code": 40004, "message": "download failed!", "data": str(e)})

  

def export_file_for_tag(*args, **kwargs):
    """

    :param args: 
    :param kwargs: 
    :return: 
    """
    task_id = request.args.get("task_id")

    image_annotations = ImageAnnotation.objects.filter(task_id=task_id)

    filename = "export_tag_{task_id}.json".format(task_id=task_id)
    download_path = DOWNLOAD_PATH
    if not os.path.exists(download_path):
        os.makedirs(download_path, 0o777)

    filepath = os.path.join(download_path, filename)
    print(filepath)


    with open(filepath, "w", encoding="utf-8") as f:
        for anno in image_annotations:
            # print(anno)
            anno_item = {}

            image_id = anno.image_id
            definition = anno.definition
            first = anno.first
            second = anno.second
            is_skip = anno.is_skip

            image = Image.objects.filter(image_id=image_id).first()
            url = image.url

            anno_item["image_id"] = image_id
            anno_item["url"] = url
            anno_item["is_skip"] = is_skip

            if definition:
                anno_item["definition"] = definition
            else:
                anno_item["definition"] = ""

            if first:
                anno_item["first"] = first
            else:
                anno_item["first"] = ""

            if second:
                anno_item["second"] = second
            else:
                anno_item["second"] = ""

            f.write(json.dumps(anno_item, ensure_ascii=False) + "\n")

    try:
        directory, filename = os.path.split(filepath)
        return send_from_directory(directory, filename, as_attachment=True)
    except Exception as e:
        return jsonify({"code": 40004, "message": "download failed!", "data": str(e)})


def export_file_for_pick(*args, **kwargs):
    """

    :param args: 
    :param kwargs: 
    :return: 
    """
    task_id = request.args.get("task_id")
    image_picks = ImagePick.objects.filter(task_id=task_id)

    filename = "export_pick_{task_id}.json".format(task_id=task_id)
    download_path = DOWNLOAD_PATH
    if not os.path.exists(download_path):
        os.makedirs(download_path, 0o777)

    filepath = os.path.join(download_path, filename)
    print(filepath)

    with open(filepath, "w", encoding="utf-8") as f:
        for pick in image_picks:
            pick_item = {}

            image_id = pick.image_id
            pick_tag = pick.pick_tag
            status = pick.status

            image = Image.objects.filter(image_id=image_id).first()
            url = image.url

            pick_item["image_id"] = image_id
            pick_item["url"] = url

            if pick_tag:
                pick_item["pick_tag"] = pick_tag
            else:
                pick_item["pick_tag"] = ""

            pick_item["status"] = status

            f.write(json.dumps(pick_item, ensure_ascii=False) + "\n")

    try:
        directory, filename = os.path.split(filepath)
        return send_from_directory(directory, filename, as_attachment=True)
    except Exception as e:
        return jsonify({"code": 40004, "message": "download failed!", "data": str(e)})

  

 

posted @ 2018-12-27 11:44  Adamanter  阅读(276)  评论(0编辑  收藏  举报