Python Flask 图片上传与下载

Python代码

#encoding:utf-8
#!/usr/bin/env python
from werkzeug.utils import secure_filename
from flask import Flask, render_template, jsonify, request, make_response, send_from_directory, abort
import os

app = Flask(__name__)
UPLOAD_FOLDER = 'upload'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
basedir = os.path.abspath(os.path.dirname(__file__))
ALLOWED_EXTENSIONS = set(['png', 'jpg', 'JPG', 'PNG', 'gif', 'GIF'])
 
def allowed_file(filename):
    return '.' in filename and filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS
 
 
@app.route('/')
def upload_test():
    ip = request.remote_addr
    print(ip)
    return render_template('up.html')
 
 
# 上传文件
@app.route('/up_photo', methods=['post'], strict_slashes=False)
def api_upload():
    ip = request.remote_addr
    file_dir = os.path.join(basedir, app.config['UPLOAD_FOLDER'],ip)
    if not os.path.exists(file_dir):
        os.makedirs(file_dir)
    f = request.files['photo']
    if f and allowed_file(f.filename):
        fname = secure_filename(f.filename)
        print (fname,f.filename,file_dir)
        f.save(os.path.join(file_dir, f.filename))

        return render_template('up.html',name="已成功上传:"+f.filename)
    else:
        return jsonify({"error": 1001, "msg": "file type error"})
 
@app.route('/download/<string:filename>', methods=['GET'])
def download(filename):
    ip = request.remote_addr
    filename = ip + "/" + filename
    if request.method == "GET":
        if os.path.isfile(os.path.join('upload', filename)):
            return send_from_directory('upload', filename, as_attachment=True)
        else:
            return jsonify({"error": 1001, "msg": filename + " not exist!"})


# show photo
@app.route('/show/<string:filename>', methods=['GET'])
def show_photo(filename):
    file_dir = os.path.join(basedir, app.config['UPLOAD_FOLDER'])
    if request.method == 'GET':
        if filename is None:
            pass
        else:
            image_data = open(os.path.join(file_dir, '%s' % filename), "rb").read()
            response = make_response(image_data)
            response.headers['Content-Type'] = 'image/png'
            return response
    else:
        pass
 
 
if __name__ == '__main__':
    app.run(threaded=True)

网页代码

up.html 注意放到templates目录下,具体代码如下

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>

<body>
    <div>
        <form method="post" action="http://localhost:5000/up_photo" enctype="multipart/form-data">
            <input type="file" size="30" name="photo" id="photo_name" required="required" />
            <br>
            <br>
            <input type="submit" value="上传处理" class="button-new" style="margin-top:15px;" />
        </form>
        <label id="return_photo_name">{{ name }}</label>
        <br>
        <input type="submit" value="下载AI放大图片" onclick="down_img()" style="margin-top:15px;" />

    </div>
</body>
<script>
    function down_img() {
        // var file_name = document.getElementById('photo_name').files[0].name;
        var return_file_name = document.getElementById('return_photo_name').innerText.trim();
        return_file_name = return_file_name.replace("已成功上传:", "");
        // alert("return_file_name is : " + return_file_name);
        if (return_file_name == "") {
            alert("请先上传图片");
            return;
        }
        else {
            window.location.href = "http://localhost:5000/download/" + return_file_name;
        }

        // alert("Hello, World!" + file_name);
    }
</script>

</html>
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AICVer

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

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

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

打赏作者

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

抵扣说明:

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

余额充值