Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Flask 学习-56.Flask-RESTX 开发文件(FileStorage)上传功能接口

Flask 学习-56.Flask-RESTX 开发文件(FileStorage)上传功能接口

作者头像
上海-悠悠
发布于 2022-09-13 07:45:33
发布于 2022-09-13 07:45:33
74300
代码可运行
举报
运行总次数:0
代码可运行

前言

Flask-RESTX  官方文档中没提供文件上传接口示例,需结合flask 框架的文件上传功能

文件上传

RequestParser 参数校验

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
       parser = reqparse.RequestParser()
        parser.add_argument('file', required=True, type=FileStorage, location='files')
        parser.add_argument('title', type=FileStorage, location='files')
        args = parser.parse_args()
        file = args['file']  # 获取文件对象

默认情况下,RequestParser尝试解析来自 flask.Request.values和的值flask.Request.json。 使用location参数来add_argument() 指定从中提取值的备用位置。上的任何变量 flask.Request都可以使用。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Look only in the POST body
parser.add_argument('name', type=int, location='form')

# Look only in the querystring
parser.add_argument('PageSize', type=int, location='args')

# From the request headers
parser.add_argument('User-Agent', location='headers')

# From http cookies
parser.add_argument('session_id', location='cookies')

# From file uploads
parser.add_argument('picture', type=werkzeug.datastructures.FileStorage, location='files')

可以通过将列表传递给来指定多个参数位置location:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
parser.add_argument('text', location=['headers', 'values'])

完整示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import os
from flask import Flask, flash, request, redirect, url_for, render_template
from werkzeug.utils import secure_filename
from flask import send_from_directory
from werkzeug.datastructures import FileStorage
from flask_restx import Resource, Api, reqparse

BASE_DIR = os.path.dirname(os.path.realpath(__file__))
UPLOAD_FOLDER = os.path.join(BASE_DIR, 'media')
ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'}

api = Api()
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024
api.init_app(app)

def allowed_file(filename):
    return '.' in filename and \
           filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

@api.route('/upfile')
class Upload(Resource):

    @staticmethod
    def allowed_file(filename):
        return '.' in filename and \
               filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

    def post(self):
        parser = reqparse.RequestParser()
        parser.add_argument('file', required=True, type=FileStorage, location='files')
        parser.add_argument('title', type=FileStorage, location='files')
        args = parser.parse_args()
        file = args['file']  # 获取文件对象
        if file and allowed_file(file.filename):
            filename = secure_filename(file.filename)  # 校验文件名称合法
            print(filename)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
            return {
                'msg': 'success',
                'url': f'/images/{filename}/',
            }
        else:
            return {
                'msg': '文件格式不支持'
            }

if __name__ == '__main__':
    app.run()

查看图片接口参考前面这篇https://www.cnblogs.com/yoyoketang/p/16664482.html 从服务器上读取文件视图函数中使用 send_from_directory(文件的目录,文件名)来获取

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from flask import send_from_directory

@app.route('/images/<filename>/')
def get_image(filename):
    return send_from_directory(UPLOAD_PATH, filename)

2022年第 12期《python接口web自动化+测试开发》课程,9月17号开学!

本期上课时间:2022年9月17号 - 2022年12月17号,周六周日上午9:00-11:00

报名费:报名费3000一人(周期3个月)

联系微信/QQ:283340479

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
linux每日命令(9):cp命令
在没有带-a参数时,两个文件的时间是不一样的。在带了-a参数时,两个文件的时间是一致的。
用户1214487
2018/12/05
9.2K0
linux基础命令介绍一:用户与文件
linux系统是一个多用户多任务的分时操作系统,但系统并不能识别人,它通过账号来区别每个用户。每个linux系统在安装的过程中都要为root账号设置密码,这个root即为系统的第一个账号。每一个用这个账号登录系统的用户都是超级管理员,他们对此系统有绝对的控制权。通过向系统管理员进行申请,还可以为系统创建普通账号。每个用普通账号登录系统的用户,对系统都只有部分控制权。 我们知道计算机中的数据是以二进制0、1的形式存储在硬件之上的。在linux中,为了管理的方便,系统将这些数据组织成目录和文件,并以一个树形的结构呈现给用户。如下图所示:
用户5030870
2019/04/11
1.3K0
linux基础命令介绍一:用户与文件
Linux ls命令
Ls 显示目录内容列表,输出信息可以进行彩色加高亮显示,以分区不同类型的文件。 语法:          touch [选项] [参数] 选项 解释 例子 -a,--all 显示所有文件,包括以“.”开头的隐藏文件 ls –a / 显示根下面的所有文件 -l 长格式显示 Ls –l 显示文件属性 -h 以1024位进制的显示文件大小 -d 显示当前目录 Ls –d /tmp -t 按照修改时间排序,默认从近到远 Ls –t / -r 倒序,经常配合-t使用 Ls –tr / -c 配合-lt 根据ctim
张琳兮
2018/09/10
7.3K0
Linux 命令(119)—— diff 命令
如果给定的文件名是 -,表示从标准输入读取内容。如果给定的文件是目录,则将会比较该目录中具有相同文件名的文件,默认情况下不会对其子目录文件进行任何比较操作。
恋喵大鲤鱼
2020/02/20
1.7K0
Linux D01 目录和文件的常用命令
2.1创建文件夹的命令 格式:mkdir 目录名 mkdir -p 目录名1/目录名2/目录名3(嵌套) 注意:新建的目录名称不能与当前目录中已有的目录或文件同名 示例: mkdir /opt/dir1 mkdir -p /opt/dir1/dir2/dir3/dir4
用户4870038
2021/02/05
9330
Linux系统 (二)- 指令学习2
在线手册分为9章,每一章包含不同功能的文档; 1号手册包含可执行程序和命令 2号手册包含系统调用 3号手册包含库函数,是C语言的库函数 4号手册包含特别文件 5号手册文件格式 6号手册游戏相关 7号手册杂项,包括附件和一些变量 8号手册系统管理相关 9号手册内核例程
怠惰的未禾
2023/04/27
2.7K0
Linux系统 (二)- 指令学习2
第五章:操作文件和目录
At this point, we are ready for some real work! This chapter will introducethe following commands:
砖业洋__
2023/05/06
2080
文件_bash笔记3
UNIX系统把一切都看作文件,甚至命令终端也是和一个设备文件关联在一起的,可以通过向该文件写入来实现向终端写入信息,例如:
ayqy贾杰
2019/06/12
5730
Linux系统:常用Linux系统管理命令总结
三、用户指令 用户操作:需要系统的root登录 1、创建用户user add 配置文件:/etc/passwd
知了一笑
2019/07/19
1.2K0
Linux文件管理之一
ls 命令用于显示指定工作目录中所包含的文件,该命令的使用方法如下:ls [选项] [文件目录列表]
姚远OracleACE
2023/04/06
4590
Linux文件管理之一
Linux中40个最佳Find命令示例
Linuxfind命令是功能强大的工具,使系统管理员可以根据广泛的搜索条件来定位和管理文件和目录。它可以按名称,类型或扩展名,大小,权限等查找目录和文件。
shaonbean
2020/11/04
4.3K0
【Linux】Linux命令大全——解压、目录、文件、搜索等
不要尝试一次学会所有的命令, 有些命令是非常不常用的,临时遇到, 临时百度就可以
陶然同学
2023/02/26
3.2K0
【Linux】Linux命令大全——解压、目录、文件、搜索等
【Linux】基础指令--(xshell - < ubuntu > )
语法: ls [选项] [目录或文件] 功能: 对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。 常用选项: • -a 列出目录下的所有文件,包括以 . 开头的隐含文件。 • -d 将目录像文件一样显示,而不是显示其下的文件。 如:ls ‒d 指定目录 • -i 输出文件的 i 节点的索引信息。 如 ls ‒ai 指定文件 • -k 以 k 字节的形式表示文件的大小。ls ‒alk 指定文件 • -l 列出文件的详细信息 • -n 用数字的 UID,GID 代替名称。 (介绍 UID, GID) • -F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通文件;“/”表示目录;“@”表示符号链接;“|”表示FIFOs;“=”表示套接字(sockets)。(目录类型识别) • -r 对目录反向排序 • -t 以时间排序 • -s 在l文件名后输出该文件的大小。(大小排序,如何找到目录下最大的文件) • -R 列出所有子目录下的文件。(递归) • -1 一行只输出一个文件。 举例:
小志biubiu
2025/02/27
1300
【Linux】基础指令--(xshell - < ubuntu > )
MAC常用终端命令行
一、说明 MAC系统采用Unix文件系统,所有文件都挂在根目录下面,没有Windows系统的盘符概念,根目录用斜杠(/)表示; 根目录(/)不是可有可无, 表示根目录下的System文件,S
mukekeheart
2021/01/18
2.8K0
Linux 文件搜索神器 find 实战详解,建议收藏!
在 Linux 系统使用中,作为一个管理员,我希望能查找系统中所有的大小超过 200M 文件,查看近 7 天系统中哪些文件被修改过,找出所有子目录中的可执行文件,这些任务需求 find 命令都可以轻松胜任。
用户3105362
2021/02/04
1.5K0
Linux 文件搜索神器 find 实战详解,建议收藏!
【Linux】Linux常用操作命令(三)
格式: tail 文件名 或 tail -10 文件名 或 tail -f 文件名
陶然同学
2023/02/27
8810
【Linux】Linux常用操作命令(三)
#抬抬小手学Python# os 库、 sys 库、getopt 库 与 filecmp 库
在 Python 中 os 库提供了基本的操作系统交互功能,该库下包含大量与文件系统、操作系统相关的函数,通过 dir 函数可以查看。
程序员迪迪
2021/12/27
7160
Linux命令3-cat、more、less
more指令是基于vim编辑器的文本过滤器,它是以全屏的方式按照分页的方式显示内容,常用的参数为:
皮大大
2021/03/01
6.7K0
Linux文件管理
相对路径:不以斜线开始,制定相对于当前工作目录活某目录的位置,可以作为一个简短的星矢制定一个文件名
鱼丸葱面
2020/12/09
4K0
Linux文件管理
10分钟就能学会,Linux操作系统21个shell常用命令
全称是 Bourne shell,由 AT&T 公司的 Steve Bourne开发,为了纪 念他,就用他的名字命名了。sh 是 UNIX 上的标准 shell,很UNIX 版本都配有 sh。sh 是第一个流行的 Shell
全栈程序员站长
2022/11/02
2.2K0
相关推荐
linux每日命令(9):cp命令
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验