flask之文件上传与下载

一、创建一个普通的文件上传的表单

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>文件上传示例</h1>
    <form action="http://127.0.0.1:9000/user/pic" enctype='multipart/form-data' method='POST' id="pic">
        <input type="file" name="file">
        <input type="submit" value="上传">
    </form>
</body>
</html>

表单的属性说明:

1、action
作用:该属性的值指向要提交到某一个页面,缺少它会不知道提交给谁
可以提交的页面:abc.aspx   abc.ashx  mvc的控制器方法 webapi接口  以及其他后端处理程序
2、method
作用:该属性的值决定以何种方式提交,缺少它会报404
可以取的值:post get put delete
3、enctype
作用:指定类型 缺少它在后台接收时文件并不会包含进去
可以取的值:multipart/form-data  application/x-www-form-urlencoded text/plain 此处必须使用 multipart/form-data才能将文件传到服务端
4、name
input标签中的file里面必须包含name属性,服务器端才能获取得到,一般顾名思义都是用file
5、accept
文件类型筛选:
 (1)图片类 
  image/gif   image/jpeg  image/png .. 多个类型之间用,隔开 如accept="image/gif, image/jpeg"
 (2)文档类  
  doc  application/msword ;css  text/css;excel application/vnd.ms-excel;ppt   application/vnd.ms-powerpoint;
(3) 多媒体类
  mp3 audio/mpeg;mp4 audio/mp4  video/mp4;
  6、multiple
  文件多选
  multiple="multiple"

二、jQuery+ajax上传图片

$(function () {
$('#pic').submit(function (e) {
	// 禁⽌浏览器对于表单的默认⾏为
	e.preventDefault();
	$(this).ajaxSubmit({
		url: "/pic2",
		type: "post",
		dataType: "json",
	success: function (data) {
		if (data.result == 1) {
			alert('⽂件上传成功');
		} else {
			alert('⽂件上传失败,请稍候重试');
		}
	}
			});
			});
});

三、服务器端数据接收

@user_blueprint.route("pic", methods=["GET", "POST"])
@login_authenticate
def user_pic_info():
    if request.method == "POST":
        file = request.files['file']  # files是fileStorage的对象,其中file就是表单中input中file的name所定义的字符串
        # file.read() 也可以读取文件的二进制数据
        filename = file.filename
        save_path = os.path.join(current_app.config["BASE_DIR"], "uploads", filename)
        file.save(save_path)
        return "OK"

四、文件下载

from flask import request,jsonify,send_from_directory,abort
import os
def download(filename):
    if request.method=="GET":
        if os.path.isfile(os.path.join('upload', filename)):
            return send_from_directory('upload',filename,as_attachment=True)

注:经过实测,需加参数as_attachment=True,否则对于图片格式、txt格式,会把文件内容直接显示在浏览器

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本实例采用的是Uploadify上传插件,.NET程序,源程序是从网上找的,但是有Bug,已经修改好,并标有部分注释。绝对好用,支持单文件、多文件上传,支持大文件上传,已经过多方面测试,保证好用。 以下附上Uploadify部分常用的参数介绍,要看全部的就去看其API文件了,一般在下载的包里都有。  uploader : uploadify.swf 文件的相对路径,该swf文件是一个带有文字BROWSE的按钮,点击后弹出打开文件对话框,默认值:uploadify.swf。   script : 后台处理程序的相对路径 。默认值:uploadify.php   checkScript :用来判断上传选择的文件在服务器是否存在的后台处理程序的相对路径   fileDataName :设置一个名字,在服务器处理程序中根据该名字来取上传文件的数据。默认为Filedata   method : 提交方式Post 或Get 默认为Post   scriptAccess :flash脚本文件的访问模式,如果在本地测试设置为always,默认值:sameDomain   folder : 上传文件存放的目录 。   queueID : 文件队列的ID,该ID与存放文件队列的div的ID一致。   queueSizeLimit : 当允许多文件生成时,设置选择文件的个数,默认值:999 。   multi : 设置为true时可以上传多个文件。   auto : 设置为true当选择文件后就直接上传了,为false需要点击上传按钮才上传 。   fileDesc : 这个属性值必须设置fileExt属性后才有效,用来设置选择文件对话框中的提示文本,如设置fileDesc为“请选择rar doc pdf文件”,打开文件选择框效果如下图:   fileExt : 设置可以选择的文件的类型,格式如:'*.doc;*.pdf;*.rar' 。   sizeLimit : 上传文件的大小限制 。   simUploadLimit : 允许同时上传的个数 默认值:1 。   buttonText : 浏览按钮的文本,默认值:BROWSE 。   buttonImg : 浏览按钮的图片的路径 。   hideButton : 设置为true则隐藏浏览按钮的图片 。   rollover : 值为true和false,设置为true时当鼠标移到浏览按钮上时有反转效果。   width : 设置浏览按钮的宽度 ,默认值:110。   height : 设置浏览按钮的高度 ,默认值:30。   wmode : 设置该项为transparent 可以使浏览按钮的flash背景文件透明,并且flash文件会被置为页面的最高层。 默认值:opaque 。   cancelImg :选择文件文件队列中后的每一个文件上的关闭按钮图标 Uploadify还自带了很多参数及有用的方法和回调函数,都在API里,虽然是全英文的,但很容易看懂,这里就不说了。
要在miniui中实现多文件上传功能,你需要使用miniui的上传控件组件,并对其进行一些配置和代码操作。下面是实现多文件上传的步骤: 1. 在页面中引入miniui的上传控件组件,如下所示: ``` <script src="/miniui/miniui.js"></script> <link href="/miniui/themes/bootstrap/miniui.css" rel="stylesheet" /> ``` 2. 在页面中添加上传控件组件,如下所示: ``` <mini-uploader id="uploader" name="file" flashUrl="/miniui/uploader/uploader.swf" uploadUrl="/upload.php" limitType="*.jpg,*.gif,*.png" limitSize="1024" multiSelect="true"></mini-uploader> ``` 其中,id为上传控件的ID,name为上传文件的参数名,flashUrl为Flash上传组件的URL,uploadUrl为文件上传的URL,limitType为文件类型的限制,limitSize为文件大小的限制,multiSelect为是否允许多文件上传。 3. 在页面中添加上传按钮,如下所示: ``` <input type="button" value="上传文件" onclick="uploadFile()" /> ``` 其中,onclick事件调用uploadFile()函数,用于触发上传事件。 4. 在页面中添加上传文件的处理函数,如下所示: ``` function uploadFile() { var uploader = mini.get("uploader"); uploader.upload(); } ``` 其中,使用mini.get获取上传控件组件,然后调用upload()方法实现文件上传功能。 5. 在服务器端编写处理文件上传的代码,如下所示: ``` <?php $uploadDir = 'uploads/'; $fileName = $_FILES['file']['name']; $filePath = $uploadDir . $fileName; move_uploaded_file($_FILES['file']['tmp_name'], $filePath); ?> ``` 其中,$uploadDir为文件上传的目录,$fileName为上传文件的名称,$filePath为上传文件的完整路径,move_uploaded_file()函数用于将上传的文件移动到指定的目录下。 通过以上步骤,就可以实现miniui的多文件上传功能了。注意,以上代码仅供参考,具体实现还需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值