本文以图片文件为例,文件的数据量较大,不适合使用get的方式上传,故采用Post作为上传方式

1.构建一个HTML页面

在其中新建表单,其中包含Post事件input按钮。在input按钮中添加multiple以开启其多选功能。

<form method="post" action="/register" enctype="multipart/form-data">
    <input type="file" name="photo" multiple>
    <button style="margin-top: 10px" type="submit">提交图片</button>
</form>

        显示效果如下

2.编写路由展示上传页面

        一个return render_template的事,代码就不做赘述了。

3.编写文件存储函数

        这里就比较关键了。由于存在多个文件,需要使用一个for循环将表单中的文件全部解析出来。

        同时常见的方法是采用时间戳作为文件名来防止文件重名,但是批量上传的文件是同一时间到达服务器的,仅采用时间戳命名会使其重名导致后面的文件覆盖前面的文件。所以在时间戳以外还需要加入一个序号标识来防止重名。

        同时,这里也可以对文件大小,格式等信息进行限制。这里就不赘述了。

@app.route('/register', methods=['POST'])
def register():
    i=0
    for img in request.files.getlist('photo'):
        suffix = '.' + img.filename.split('.')[-1] # 获取文件后缀名
        img_path = './static/uploads/' + str(int(time.time())) +'_p'+str(i) + suffix # 拼接路径
        img.save(img_path) #保存图片
        print(img_path)
        i=i + 1 #序号戳记++
    
    return {'msg':'ok'}

         效果拔群

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐