flask 上传和下载文件

flask 上传和下载文件

自动创建文件存储目录
def get_file_dir(self, obj_id):
    try:
	    target_father_dir = os.path.join(app.config['UPLOAD_DIR'], "xxxx")
	    if not os.path.exists(target_father_dir):
	        os.makedirs(target_father_dir)
	    target_dir = os.path.join(target_father_dir, obj_id)
	    if not os.path.exists(target_dir):
	        os.makedirs(target_dir)
	    return target_dir
	except:  # 若失败,极可能是因为服务器上的用户权限问题
	    return self.render_json(code=Code.failed, message='创建文件存储目录失败')
上传文件
def upload_file(self, params=None):
    f = request.files.get('file')
    file_name = f.filename
    file_ext = f.filename.split('.')[-1].lower()
    file_type = f.content_type
    json_data = outputParamValues()
    # 类型限制
    if file_ext not in ["jpg", "jpeg", "png", "pdf", "ppt", "docx", "doc", "msg"]:
        return self.render_json(code=Code.failed, message='上传文件的类型限制为: jpg、jpeg、png、pdf、ppt、word、msg')
    obj_id = json_data.get('obj_id')
    if 根据obj_id查询数据库:
    	return self.render_json(code=Code.failed, message='无xxx对象')
    try:
    	# 存储文件
        target_dir = self.get_file_dir(obj_id)
        f.save(target_dir + "/" + file_name)
        # 验证是否存储成功
        if not os.path.exists(target_dir + "/" + file_name):
            return self.render_json(code=Code.failed, message='存储文件失败')
        # 返回数据
        data = {'obj_id': obj_id, 'data': {'file_name': file_name,
                                            'target_dir': target_dir,
                                            'path': target_dir + "/" + file_name,
                                            'file_type': file_type}}    # file_type 前端以后下载时会起作用
        return self.render_json(code=Code.Ok,  message='存储文件成功', data=data)
    except:
        return self.render_json(code=Code.failed, message='存储文件失败')
下载文件
def download_file(self, params=None):
    # flask框架提供了 send_from_directory 方法,只需要提供补充其中的参数即可
    return send_from_directory(target_dir, file_name, attachment_filename=file_name, as_attachment=True)
posted @ 2022-03-07 10:17  疯狂列表推导式  阅读(311)  评论(0编辑  收藏  举报