bottle.py 实现批量文件上传

2023-10-27

bottle.py是python的一个Web框架,整个框架只有一个文件,几十K,却自带了路径映射、模板、简单的数据库访问等web框架组件,确实是个可用的框架。初学web开发可以拿来玩玩,其语法简单,部署也很方便。官方文档: http://bottlepy.org/docs/dev/tutorial.html (官方文档的介绍挺好懂的,主要是这个框架比较小)

先演示一个简单的例子吧:

from bottle import route, run

@route('/:name')
def index(name='World'):
         return 'Hello %s!' % name

run(host='localhost', port=8080)

我准备使用bottle.py实现一个批量文件上传的功能,但是根据官方文档的介绍,它只提供了一个上传一个文件的功能,文档介绍如下:

  • FILE UPLOADS

To support file uploads, we have to change the tag a bit. First, we tell the browser to encode the form data in a different way by adding an enctype=”multipart/form-data” attribute to the tag. Then, we add tags to allow the user to select a file. Here is an example:*

<form action="/upload" method="post" enctype="multipart/form-data">
  Category:      <input type="text" name="category" />
  Select a file: <input type="file" name="upload" />
  <input type="submit" value="Start upload" />
</form>

Bottle stores file uploads in BaseRequest.files as FileUpload instances, along with some metadata about the upload. Let us assume you just want to save the file to disk:

@route('/upload', method='POST')
def do_upload():
    category   = request.forms.get('category')
    upload     = request.files.get('upload')
    name, ext = os.path.splitext(upload.filename)
    if ext not in ('.png','.jpg','.jpeg'):
        return 'File extension not allowed.'

    save_path = get_save_path_for_category(category)
    upload.save(save_path) # appends upload.filename automatically
    return 'OK'
  • FileUpload. filename contains the name of the file on the clients file system, but is cleaned up and normalized to prevent bugs caused by unsupported characters or path segments in the filename. If you need the unmodified name as sent by the client, have a look at FileUpload.raw_filename.

  • The FileUpload.save method is highly recommended if you want to store the file to disk. It prevents some common errors (e.g. it does not overwrite existing files unless you tell it to) and stores the file in a memory efficient way. You can access the file object directly via FileUpload.file. Just be careful.


文档中提供了FileUpload.filename,FileUpload.raw_filename,FileUpload.file,FileUpload.save等接口,我们可以使用FileIpload.save来保存文件到磁盘,可以使用FileIpload.file来完成读取二进制流的任务,大家可以根据需要来完成相应的需求,下面我给出一个批量上传图片的例子,并以二进制流来读取它们(读完之后大家可以将这些数据保存到数据库中)


#!/usr/bin/env python
from bottle import run,post,get,request

@get(r'/')
def index():
    return '''
            <!DOCTYPE html>
            <html>
            <head>
            <title>
            Solution 4-5: Sending multiple files
            </title>
            </head>
            <body>
            <form action='/up' enctype="multipart/form-data" method='post'>
            <fieldset>
            <legend>Solution 4-5: Sending multiple files</legend>
            <label>Upload one or more files:</label>
            <input type="file" name="upload" multiple />
            <input type='submit' value='submit'>
            </fieldset>
            </form>
            </body>
            </html>
            '''

@post(r'/up')
def uploadFile():
    upload = request.files.getall('upload')
    for meta in upload:
        buf = meta.file.read()
        print ('image:',str(buf))

run(host='localhost', port=8888,debug=True)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

bottle.py 实现批量文件上传 的相关文章

随机推荐

  • server 2003搭建文件服务器,使用Windows Server 2003搭建安全文件服务器

    ZDNetChina服务器站 8月14日x86技巧 启用并配置文件服务 Windows Server 2003的管理工具中有一项功能叫做 管理您的服务器 启动该工具之后 可以看到当前服务器上启用的所有服务 并可对这些服务进行管理 点击该界面
  • IOC和DI的关系

    IOC 控制反转 全称为 Inverse of Control 将对在自身对象中的一个内置对象的控制反转 反转后不再由自己本身的对象进行控制这个内置对象的创建 而是由第三方系统去控制这个内置对象的创建 简单来说就是把本来在类内部控制的对象
  • LLM Data Pipelines: 解析大语言模型训练数据集处理的复杂流程

    编者按 在训练大语言模型的过程中 构建高质量的训练数据集是非常关键的一步 但关于构建大模型训练所需数据集的通用数据处理流程 Data pipelines 的相关资料极为稀少 本文主要介绍了基于Common Crawl数据集的数据处理流程 首
  • 基于Spring Boot+ Vue的健身房管理系统与实现

    小熊学Java全能学 面试指南 https javaxiaobear cn 摘要 随着健身行业的快速发展 健身房管理系统成为了提高管理效率和用户体验的重要工具 本论文旨在设计与实现一种基于前后端分离的健身房管理系统 通过前后端分离的架构模式
  • R语言笔记:机器学习【决策树(Decision Tree】

    写在开头 我是一个学R的小白 因为读研老师要求开始接触R 记一记笔记留给自己以后回顾 顺便分享出来嘻嘻 我把需要深入的的函数进行介绍 方便了解这些函数的用法 一些简单的函数我就不放出来啦 决策树这部分的笔记主要是利用分类回归法哈 rpart
  • Python_集合去重的底层原理

    Python 集合去重的底层原理 https www cnblogs com linshuhui p 9580620 html
  • JAVA枚举类型(enum)的巧妙应用

    枚举类型的应用 实例 总结 根据接口文档的需求 需要使用通用的返回值类型进行返回 实例 return 调用的error方法就是先new一个ApiRestResponse对象 然后返回 之前在controller层调用的ImoocMallEx
  • Java和Java之父

    詹姆斯 高斯林 James Gosling 1955年5月19日出生于加拿大 是Java编程语言的共同创始人之一 一般公认他为 Java之父 1983年高斯林获得了美国卡内基梅隆大学计算机科学博士学位 博士论文的题目是 The Algebr
  • python编程语言介绍-Python基础手册 1 —— Python语言介绍

    python logo png Python 是一门优雅而健壮的编程语言 它继承了传统编译语言的强大性和通用性 同时也借鉴了脚本语言和解释语言的简单性和易用性 一 Python 的历史 Python是由创始人贵铎 范 罗萨姆 Guido v
  • js 字符串转换数字

    本文转载至 http www phpweblog net linxiaobo archive 2008 12 29 6250 html PS 今天用到了 一下子想不起来 所以写下来 省得下次又找 方法主要有三种 转换函数 强制类型转换 利用
  • centos 上安装redis 3.0.5

    官网下载安装包 直接使用make编译 报如下错误 root localhost redis 3 0 5 make cd src make all make 1 进入目录 usr local opentest redis 3 0 5 src
  • 记一次udf提权

    靶场myandmygirlfriend 前面的信息收集就不说了 arp scan l nmap扫描主机和端口 dirsearch扫描目录 打开页面可以看到 only be accessed local 谷歌翻译发现是只能本地访问 看一眼源码
  • Problem:ImageView不能显示图片。

    1 问题分析 要实现的功能是 ImageView被加载进了一个绝对布局对象中 并通过不断地设置LayoutParam来改变其位置 其中ImageView中的图片是以方法setBackgroundDrawable加载的 而用此方法 在过去有一
  • STM32ADC多通道采集(基于DMA)

    首先简单介绍DMA DMA Direct Memory Access 直接内存存取 用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输 无需CPU干预 节省CPU资源 ADC转换出来的值直接赋值给定义好的变量中 配置好的DMA可
  • PCA降维算法的介绍、多角度推导及python实现

    一 算法原理及数学推导 在对于数据的处理上 特征维度过高经常是一个无法忽视的问题 但是单纯的降维压缩对于数据本身会使得数据信息遭到严重损失 不过以PCA为代表的线性降维算法对这方面有所保证 它的目标是通过某种线性投影 将高维的数据映射到低维
  • JVM内存模型

    内存模型主要分为共享内存和线程独享内存 内存分配原理为1 JVM先检查new关键字 并在常量池中定位到一个类的引用 2 检查定位到的类是否已经经过了加载 解析 初始化等步骤 3 为其分配内存 存储对象实例 一 共享内存 1 运行时常量池 编
  • C++连接数据库

    一 sql h ifndef SQL H define SQL H include
  • 聊聊Spring注解@Transactional失效的那些事

    一 前言 emm 又又又踩坑啦 这次的需求主要是对逾期计算的需求任务进行优化 现有的计算任务运行时间太长了 简单描述下此次的问题 在项目中进行多个数据库执行操作时 我们期望的是将其整个封装成一个事务 要么全部成功 或者全部失败 然而在自测异
  • 通过刷脸来支付的确带给了我们很多便利

    在携带手机不方便或者受到限制的场所 也是刷脸支付的重要应用场景 比如游泳池附近 海边沙滩游乐场 比如易燃易爆的场所 学校 工厂等禁用手机的地方 随着刷脸支付如此私密的功能被越来越多的人接受 刷脸功能也一定不会止步于此 未来更多场景的应用是大
  • bottle.py 实现批量文件上传

    bottle py是python的一个Web框架 整个框架只有一个文件 几十K 却自带了路径映射 模板 简单的数据库访问等web框架组件 确实是个可用的框架 初学web开发可以拿来玩玩 其语法简单 部署也很方便 官方文档 http bott