当前位置: 首页 > news >正文

python(26) : 文件上传及下载和预览

# -*- coding: utf-8 -*-

# ====> 上传文件 <==== #

import os

from flask import Flask, jsonify, request, send_file
from flask_cors import CORS
import logging

# 创建一个logger
lg = logging.getLogger('logger')

app = Flask(__name__)

# 设置文件上传大小限制为500MB
app.config['MAX_CONTENT_LENGTH'] = 500 * 1024 * 1024
CORS(app)
file_save_folder = os.getcwd() + os.sep + 'files'
os.makedirs(file_save_folder, exist_ok=True)

f_debug = False
f_port = 7001


def make_api_response_failed(data=None):
    rs = {
        'success': False,
        'msg': '',
        'code': 400,
        'data': data
    }
    return jsonify(rs)


def make_api_response(data=None):
    rs = {
        'success': True,
        'msg': None,
        'code': 200,
        'data': data
    }
    return jsonify(rs)


@app.route('/api/upload', methods=['POST'])
def upload():
    try:
        if 'file' not in request.files:
            return make_api_response_failed(msg=f'请求中没有文件部分')
        file = request.files['file']
        if file.filename == '' or not file:
            return make_api_response_failed(msg=f'未选择文件')
        filename = file.filename
        filepath = os.path.join(file_save_folder, filename)
        file.save(filepath)
        url = f'http://127.0.0.1:{f_port}/api/download/{filename}'
        res = {
            'url': url,
            'file_name': filename,
            'filepath': filepath
        }
        return make_api_response(res)
    except Exception:
        lg.error("文件上传出错: ", exc_info=True)
        return make_api_response_failed(msg=f'文件上传出错')


@app.route('/api/download/<string:filename>', methods=['GET'])
def download(filename):
    try:
        return send_file(os.path.join(file_save_folder, filename), as_attachment=False)
    except Exception:
        lg.error("文件下载出错: ", exc_info=True)
        return make_api_response_failed(msg=f'文件下载出错')


if __name__ == '__main__':
    lg.info(f'开始启动文件管理服务,端口为:{f_port}, 是否开启debug:{f_debug}')
    app.run(host='0.0.0.0', port=f_port, debug=f_debug)

前端代码参考: 前端技术(28) : 拖拽、粘贴和点击浏览文件上传-CSDN博客

相关文章:

  • Spring容器从启动到关闭的注解使用顺序及说明
  • LVS的三种工作模式简述
  • 在linux系统上卸载并重新安装Docker及配置国内镜像源指
  • Open Graph 社交卡片介绍:让网站在社群上被漂亮分享
  • jEasyUI 创建自定义视图
  • 通过TIM+DMA Burst 实现STM32输出变频且不同脉冲数量的PWM波形
  • 漏洞发现:AWVS 联动 XRAY 图形化工具.(主动+被动 双重扫描)
  • css 实现闪烁光标
  • DaemonSet 与 Deployment 的主要区别
  • 使用 Layers 扩展你的 Nuxt4 应用
  • VScode-i18n-ally-Vue
  • “线程通信“一个案例
  • 仓储物流中UWB标签实现货物实时追踪的技术路径与品铂科技方案解析
  • MySQL、创建数据库、表、SQL 函数:数学函数、字符串函数、日期函数、聚合函数
  • 怎么使用pm2启动和暂停后端程序(后端架构nodejs+koa)
  • 【学Rust写CAD】14线性插值函数(加入color.rs)
  • Docker 快速入门指南
  • 【安全运营】关于攻击面管理相关概念的梳理(二)
  • Ubuntu 24.04 安装 Docker 详细教程
  • SQL server中的事务与锁
  • 东莞seo建站优化哪里好/软文宣传推广
  • 企业网站建设策划书方案范文/昆明seo关键字推广
  • 做快递网站制作/网站优化靠谱seo
  • 新闻网站开发课程设计模板/淘宝seo是什么
  • 医院网站建设的指导思想/seo技术蜘蛛屯
  • 如何判断网站有cdn加速/搜索引擎营销案例有哪些