flask(九)----jquery请求实现文件上传与访问

1.文件上传的html页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
    <!--引入jquery-->
    <script src="https://cdn.bootcss.com/jquery/2.1.1/jquery.min.js"></script>
</head>
<body>
    <form action="/upload" method="post" enctype="multipart/form-data">
        <input type="file" name="f">
        <br>
        <br>
        <input type="submit">

    </form>
    
    <!--此处script标签与文件上传功能无关-->
     <script>
            function send_ajax(){
                $.ajax({
                    url:'http://127.0.0.1:5000',
                    data:JSON.stringify({username:'chuntian',pwd:'123'}),
                    type:'POST',
                    dataType:'json',
                    contentType:'application/json',   <!--此处指定为'appliction/json'格式,则jquery请求在后台接收用request.json;-->
                                                        <!--若没有指定'application/json'格式,后台接收用request.form。-->
                    success:function(data){
                        alert('成功')
                    }
                });
            }
      </script>

</body>
</html>

 2.后台处理

from flask import Flask, request, render_template

app = Flask(__name__,
            template_folder='static')

app.config['MAX_CONTENT_LENGTH'] = 10 * 1024 * 1024     # 限制上传的文件大小

def allowed_files(filename):
    format_list = ['jpg', 'png', 'gif']
    file_type = filename.split('.')[1]
    if file_type in format_list:
        return True
    return False
    

@app.route('/upload', methods=['GET', 'POST'])
def upload():
    file = request.files.get('f')  # 从请求过来的数据中获取file,根据前端form表单中的文件name属性获取
    if file is None:
        return render_template('index.html')
    if allowed_files(file.filename):
        file.save(file.filename)  # 根据文件名保存
        return 'save success'
    return 'error'


app.run(debug=True)

3.实现效果:

 4.让文件可以被访问

import os

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

app = Flask(__name__,
            template_folder='static')

app.config['MAX_CONTENT_LENGTH'] = 10 * 1024 * 1024     # 限制上传的文件大小

def allowed_files(filename):
    format_list = ['jpg', 'png', 'gif']
    file_type = filename.split('.')[1]
    if file_type in format_list:
        return True
    return False


@app.route('/upload', methods=['GET', 'POST'])
def upload():
    file = request.files.get('f')  # 从请求过来的数据中获取file,根据前端form表单中的文件name属性获取
    if file is None:
        return render_template('index.html')
    if allowed_files(file.filename):
        file.save(secure_filename(file.filename))  # 根据文件名保存,secure_filename:会自动将前端的输入去掉空格,填充格式,避免问题
        return 'save success'
    return 'error'


@app.route('/upload/<filename>', methods=["GET"])
def get_file(filename):
    return send_from_directory(os.getcwd(), filename)  # 前端访问时需要返回的数据


app.run(debug=True)

实现效果:

通常,我们把上传的图片的地址保存在数据库中,从数据库读取数据时,返回数据的地址,后端根据返回的地址查找图片。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chuntian_tester

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值