前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >文件上传

文件上传

作者头像
星哥玩云
发布2022-09-14 18:55:10
4.8K0
发布2022-09-14 18:55:10
举报
文章被收录于专栏:开源部署

一、上传文件存储目录

在静态目录下创建名为upload的目录作为上传文件存储目录

二、原生文件上传

配置

代码语言:javascript
复制
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">allowed_file</span><span class="hljs-params">(filename)</span>:</span>
    <span class="hljs-keyword">return</span> <span class="hljs-string">"."</span> <span class="hljs-keyword">in</span> filename <span class="hljs-keyword">and</span> filename.rsplit(<span class="hljs-string">"."</span>, <span class="hljs-number">1</span>)[<span class="hljs-number">1</span>] <span class="hljs-keyword">in</span> DefaultConfig.ALLOWED_EXTENSIONS
    
<span class="hljs-comment"># 原生<a href="https://www.xgss.net/tag/%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0" title="查看“文件上传”所有文章" target="_blank">文件上传</a></span>
<span class="hljs-comment"># 上传路径</span>
UPLOAD_FOLDER = os.path.join(BASE_DIR, <span class="hljs-string">"static/media"</span>)
<span class="hljs-comment"># 配置上传文件的最大尺寸,默认不受限制</span>
MAX_CONTENT_LENGTH = <span class="hljs-number">1024</span> * <span class="hljs-number">1024</span> * <span class="hljs-number">2</span>
<span class="hljs-comment"># 设置允许上传文件的类型</span>
ALLOWED_EXTENSIONS = [<span class="hljs-string">"jpg"</span>,<span class="hljs-string">"png"</span>,<span class="hljs-string">"jpeg"</span>,<span class="hljs-string">"gif"</span>]
<span class="hljs-comment"># 验证是否允许上传,允许返回True,否则返回False</span>
IS_ALLOWED_FUNC = allowed_file

上传界面

upfile.html

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>上传文件</title>
</head>
<body>
    <form action="/upfile/" method="post" enctype="multipart/form-data">
        <input type="file" name="file"><br/>
        <input type="submit" value="上传">
    </form>
</body>
</html> 

request.files

代码语言:javascript
复制
ImmutableMultiDict([(<span class="hljs-string">'file'</span>, &lt;FileStorage: <span class="hljs-string">'a.txt'</span> (<span class="hljs-string">'text/plain'</span>)&gt;)])

视图

代码语言:javascript
复制
<span class="hljs-comment"># 原生<a href="https://www.xgss.net/tag/%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0" title="查看“文件上传”所有文章" target="_blank">文件上传</a>视图</span>
<span class="hljs-meta">@main.route('/upload/', methods=['GET', 'POST'])</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">upload</span><span class="hljs-params">()</span>:</span>
    <span class="hljs-keyword">if</span> request.method == <span class="hljs-string">'GET'</span>:
        <span class="hljs-keyword">return</span> render_template(<span class="hljs-string">'upload.html'</span>)
    <span class="hljs-keyword">else</span>:
        <span class="hljs-comment"># 获取上传文件对象</span>
        file = request.files.get(<span class="hljs-string">'file'</span>)
        filename = file.filename  <span class="hljs-comment"># 获取文件名称</span>
        <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> current_app.config[<span class="hljs-string">'IS_ALLOWED_FUNC'</span>](filename):
            <span class="hljs-keyword">return</span> <span class="hljs-string">'该文件类型不允许上传'</span>
        filePath = os.path.join(current_app.config[<span class="hljs-string">'UPLOAD_FOLDER'</span>], filename)
        file.save(filePath)
        <span class="hljs-keyword">return</span> <span class="hljs-string">'<a href="https://www.xgss.net/tag/%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0" title="查看“文件上传”所有文章" target="_blank">文件上传</a>成功'</span>

三、使用flask-uploads三方插件

安装

pip install flask-uploads

创建

代码语言:javascript
复制
<span class="hljs-keyword">from</span> flask_uploads <span class="hljs-keyword">import</span> UploadSet
<span class="hljs-keyword">from</span> flask_uploads <span class="hljs-keyword">import</span> TEXT, IMAGES
<span class="hljs-comment"># 与配置文件要对应    限制上传类型</span>
uploads = UploadSet(<span class="hljs-string">"UPLOADS"</span>, extensions=IMAGES)

<span class="hljs-keyword">from</span> .ext_uploads <span class="hljs-keyword">import</span> uploads

加载

代码语言:javascript
复制
<span class="hljs-keyword">from</span> exts <span class="hljs-keyword">import</span> uploads
<span class="hljs-keyword">from</span> flask_uploads <span class="hljs-keyword">import</span> configure_uploads
<span class="hljs-keyword">from</span> flask_uploads <span class="hljs-keyword">import</span> patch_request_class

<span class="hljs-comment">#加载上传三方对象</span>
configure_uploads(app, uploads)
<span class="hljs-comment"># 配置上传文件的大小,默认64M,如果size设置为None,会读取MAX_CONTENT_LENGTH配置的值</span>
patch_request_class(app, size=<span class="hljs-keyword">None</span>)

配置

代码语言:javascript
复制
<span class="hljs-comment">#上传文件</span>
UPLOADED_UPLOADS_DEST = os.path.join(BASE_DIR, <span class="hljs-string">"static/media"</span>)
MAX_CONTENT_LENGTH = <span class="hljs-number">2</span> * <span class="hljs-number">1024</span> * <span class="hljs-number">1024</span>
<span class="hljs-comment"># UPLOADED_UPLOADS_URL = "http://127.0.0.1:5000:8000/static/media/"</span>

示例

代码语言:javascript
复制
<span class="hljs-keyword">from</span> exts <span class="hljs-keyword">import</span> uploads
<span class="hljs-keyword">from</span> flask_uploads <span class="hljs-keyword">import</span> UploadNotAllowed

<span class="hljs-meta">@myApp.route("/upfile/", methods=["GET", "POST"])</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">upfile</span><span class="hljs-params">()</span>:</span>
    <span class="hljs-keyword">if</span> request.method == <span class="hljs-string">"GET"</span>:
        <span class="hljs-keyword">return</span> render_template(<span class="hljs-string">"upfile.html"</span>)
    <span class="hljs-keyword">else</span>:
      	file = request.files.get(<span class="hljs-string">'file'</span>)
        <span class="hljs-comment"># 获取保存文件的url</span>
        img_url = uploads.url(file.filename)
        print(img_url)
        <span class="hljs-keyword">try</span>:
            uploads.save(file, name=file.filename)
        <span class="hljs-keyword">except</span> UploadNotAllowed <span class="hljs-keyword">as</span> e:
            <span class="hljs-keyword">pass</span>
        <span class="hljs-keyword">return</span> <span class="hljs-string">"上传文件成功"</span>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、上传文件存储目录
  • 二、原生文件上传
  • 三、使用flask-uploads三方插件
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档