Flask-上传文件和访问上传的文件

 1.1.上传文件和访问上传的文件

upload_file_demo.py

from flask import Flask,request,render_template
import os
from werkzeug.utils import secure_filename
from flask import send_from_directory

app = Flask(__name__)

#新建images文件夹,UPLOAD_PATH就是images的路径
UPLOAD_PATH = os.path.join(os.path.dirname(__file__),‘images‘)

@app.route(‘/upload/‘,methods=[‘GET‘,‘POST‘])
def settings():
    if request.method == ‘GET‘:
        return render_template(‘upload.html‘)
    else:
        desc = request.form.get(‘desc‘)
        avatar = request.files.get(‘avatar‘)
        # 对文件名进行包装,为了安全,不过对中文的文件名显示有问题
        filename = secure_filename(avatar.filename)
        avatar.save(os.path.join(UPLOAD_PATH,filename))
        print(desc)
        return ‘文件上传成功‘

#访问上传的文件
#浏览器访问:http://127.0.0.1:5000/images/django.jpg/  就可以查看文件了
@app.route(‘/images/<filename>/‘,methods=[‘GET‘,‘POST‘])
def get_image(filename):
    return send_from_directory(UPLOAD_PATH,filename)

@app.route(‘/‘)
def hello_world():
    return ‘Hello World!‘

if __name__ == ‘__main__‘:
    app.run(debug=True)

upload.html

<form action="" method="post" enctype="multipart/form-data">
    <table>
        <tbody>
            <tr>
                <td>头像:</td>
                <td><input type="file" name="avatar"></td>
            </tr>
            <tr>
                <td>描述:</td>
                <td><input type="text" name="desc"></td>
            </tr>
            <tr>
                <td><input type="submit" value="提交"></td>
            </tr>
        </tbody>
    </table>
</form>

1.2.使用flask-wtf验证上传的文件

forms.py

from wtforms import Form,FileField,StringField
from wtforms.validators import InputRequired
from flask_wtf.file import FileRequired,FileAllowed

class UploadForm(Form):
    avatar = FileField(validators=[FileRequired(),       #FileRequired必须上传
                                   FileAllowed([‘jpg‘,‘png‘,‘gif‘])     #FileAllowed:必须为指定的格式的文件
                                   ])
    desc = StringField(validators=[InputRequired()])

upload_file_demo.py

from flask import Flask, request, render_template
import os
from werkzeug.utils import secure_filename
from flask import send_from_directory
from forms import UploadForm
from werkzeug.datastructures import CombinedMultiDict

app = Flask(__name__)

# 新建images文件夹,UPLOAD_PATH就是images的路径
UPLOAD_PATH = os.path.join(os.path.dirname(__file__), ‘images‘)

@app.route(‘/upload/‘, methods=[‘GET‘, ‘POST‘])
def settings():
    if request.method == ‘GET‘:
        return render_template(‘upload.html‘)
    else:
        # 文件是从request,files里面获取,这里使用CombinedMultiDict把form和file的数据组合起来,一起验证
        form = UploadForm(CombinedMultiDict([request.form, request.files]))
        if form.validate():
            desc = request.form.get(‘desc‘)
            avatar = request.files.get(‘avatar‘)
            # 对文件名进行包装,为了安全,不过对中文的文件名显示有问题
            filename = secure_filename(avatar.filename)
            avatar.save(os.path.join(UPLOAD_PATH, filename))
            print(desc)
            return ‘文件上传成功‘
        else:
            print(form.errors)
            return "fail"

# 访问上传的文件
# 浏览器访问:http://127.0.0.1:5000/images/django.jpg/  就可以查看文件了
@app.route(‘/images/<filename>/‘, methods=[‘GET‘, ‘POST‘])
def get_image(filename):
    return send_from_directory(UPLOAD_PATH, filename)

@app.route(‘/‘)
def hello_world():
    return ‘Hello World!‘

if __name__ == ‘__main__‘:
    app.run(debug=True)

原文地址:https://www.cnblogs.com/caodneg7/p/10139995.html

时间: 2024-08-29 15:54:31

Flask-上传文件和访问上传的文件的相关文章

如何自学Struts2之Struts2文件上传和数据库访问[视频]

如何自学Struts2之Struts2文件上传和数据库访问[视频] 之前写了一篇"打算做一个视频教程探讨如何自学计算机相关的技术",优酷上传不了,只好传到百度云上: http://pan.baidu.com/s/1kTDsa95 由于上次视频没有声音,所以在这节课"Struts2数据库访问"一起再讲一下.

Flask Web开发入门北京快乐8出售之文件上传

本章北京快乐8出售 dsluntan.com 我们介绍Flask Web开发中涉及的文件上传模块 定义后台接收处理逻辑@app.route('/upload', methods=['POST'])def upload_file():if request.method == 'POST': check if the post request has the file part if 'file' not in request.files: logger.debug('No file part')

文件夹没有安全选项-文件上传下载-路径访问被拒绝

在文件的下载和上传中,有时候会出现“路径...访问被拒绝”,这是由于权限问题引起,只要给文件所在的文件夹设置权限为everyone就可以解决了,但是有时候文件夹属性没有“安全”选项卡,解决方法如下: 第一种方法: 打开文件夹,选择“工具”----“文件夹选项”----“查看”,去掉“使用简单文件共享”选项. 如果第一种方法不行,使用第二方法: 选择 “开始”---“控制面板”----“管理工具”---“本地安全策略”---“本地策略”---“安全选项” 双击 “网络访问:本地账户的共享和安全模式

WEB版一次选择多个文件进行批量上传(Plupload)的解决方案

WEB版一次选择多个文件进行批量上传(Plupload)的解决方案 转载自http://www.cnblogs.com/chillsrc/archive/2013/01/30/2883648.html 说明:Plupload支持多种浏览器,多种上传方式! 一般的WEB方式文件上传只能使用FileUpload控件进行一个文件一个文件的进行上传,就算是批量上传,也要把文件一个一个的添加到页面,无法如 windows程序一样,一次选择多个文件进行批量上传.这样在某些应用上就显得很不人性化,有时候客户希

阻止文件不被上传到iCloud-b

有空用下 http://www.cocoachina.com/bbs/read.php?tid=86244 http://www.ooso.net/archives/617 http://blog.csdn.net/theonezh/article/details/7711749 https://gist.github.com/4527957 如何阻止文件被iTunes和iCloud同步 How do I prevent files from being backed up to iCloud

[转]用C#如何实现大文件的断点上传

最近做在做一个项目,涉及到文件上传的问题. 以前也做过文件上传.但都是些小文件,不超过2m. 这次要求上传1g以上的东西. 没办法找来资料研究了一下. 基于web的文件上传可以使用ftp和http两种协议,用ftp的话虽然传输稳定,但安全性是个严重的问题,所以没有考虑. 剩下只有http. 在http中有3种方式,put.webdav.rfc1867,前2种方法不适合大文件上传,在这里也不说了. 确定使用rfc1867格式处理之后开始分析流行的上传组件.看了n多代码之后发现,目前无组件程序和一些

[Plugin] WEB版一次选择多个文件进行批量上传(swfupload)的解决方案

URL:http://www.cnblogs.com/chillsrc/archive/2010/02/21/1670594.html 说明:功能完全支持ie和firefox浏览器! 一般的WEB方式文件上传只能使用FileUpload控件进行一个文件一个文件的进行上传,就算是批量上传,也要把文件一个一个的添加到页面,无法如 windows程序一样,一次选择多个文件进行批量上传.这样在某些应用上就显得很不人性化,有时候客户希望能够一次选择很多文件,然后让系统把选择的文 件全部上传. 这里,就将针

asp.net mvc 文件跨域上传,接收返回结果

在系统中我们可能有各种各样的文件上传,这样我们可能会把文件模块单独部署一台服务器,这样在上传时就会遇到跨域问题.我们可以先上传到服务端然后通过httpClient等技术再上传到文件服务器,这样就不会存在跨域问题,但是这样多出了服务器中转的一个步骤,现在我们说一下如何在客户端直接跨域上传到文件服务器. 1.文件服务器部署一个文件上传接口(实现技术:webapi,webservice,mvc等等) 文件上传接口示例如下(MVC方式): /// <summary> /// 上传接口 /// <

异步无刷新上传文件并且上传文件可以带上参数

关于异步上传文件并且带上参数,网上有很多关于这样的插件,而我最喜欢用的插件是ajaxfileupload.js,该插件的代码如下: /*   131108-xxj-ajaxFileUpload.js 无刷新上传图片 jquery 插件,支持 ie6-ie10    依赖:jquery-1.6.1.min.js   主方法:ajaxFileUpload 接受 json 对象参数   参数说明:   fileElementId:必选,上传文件域ID   url:必选,发送请求的URL字符串   fi