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 osapp = 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_addrprint(ip)return render_template('up.html')# 上传文件
@app.route('/up_photo', methods=['post'], strict_slashes=False)
def api_upload():ip = request.remote_addrfile_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_addrfilename = ip + "/" + filenameif 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:passelse:image_data = open(os.path.join(file_dir, '%s' % filename), "rb").read()response = make_response(image_data)response.headers['Content-Type'] = 'image/png'return responseelse:passif __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>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/16430.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

公共代理IP和独享代理IP之间的区别?

公共代理IP和独享代理IP在网络应用中扮演着不同的角色&#xff0c;它们之间的区别主要体现在使用方式、性能、安全性以及隐私保护等方面。以下是对这两种代理IP的详细对比和分析。 第一点就是使用的方式以及成本上的不同&#xff0c;公共代理IP&#xff0c;顾名思义&#xff0…

python基于深度学习的聊天机器人设计

python基于深度学习的聊天机器人设计 开发语言:Python 数据库&#xff1a;MySQL所用到的知识&#xff1a;Django框架工具&#xff1a;pycharm、Navicat、Maven 系统功能实现 登录注册功能 用户在没有登录自己的用户名之前只能浏览本网站的首页&#xff0c;想要使用其他功能都…

服务器被黑?快速检测和识别系统中的恶意进程

在管理和维护服务器时,检测和识别系统中的恶意进程是非常重要的。本文将详细介绍几种常用方法和工具,帮助您有效地检测和处理恶意进程,确保系统的安全性。 方法一:使用系统监控工具 1.1. 使用 ps 命令 ps 命令可以列出系统中所有正在运行的进程。使用以下命令查看特定用户…

SpringBoo+vue3整合讯飞星火3.5通过webscoket实现聊天功能(全网首发)附带展示效果

API版本&#xff1a;Spring Boot 整合讯飞星火3.5通过接口Api接口实现聊天功能&#xff08;首发&#xff09;复制粘贴即可使用&#xff0c;后续更新WebSocket实现聊天功能_讯飞星火web聊天-CSDN博客https://blog.csdn.net/qq_53722480/article/details/138865508?csdn_share_t…

STL库 —— unordered_set与unordered_map的封装

这里要对 unordered_set 与 unordered_map 进行封装&#xff0c;封装时使用的是上一篇中学的 HashBucket 。不仅要完成封装&#xff0c;同时要写入迭代器。 一、HashBucket 的修改 1.1 节点的修改 T 首先来认识一下使用 unordered_set 和 ordered_map 时的区别&#xff1a; …

深入浅出MySQL事务实现底层原理

重要概念 事务的ACID 原子性&#xff08;Atomicity&#xff09;&#xff1a;即不可分割性&#xff0c;事务中的操作要么全不做&#xff0c;要么全做一致性&#xff08;Consistency&#xff09;&#xff1a;一个事务在执行前后&#xff0c;数据库都必须处于正确的状态&#xf…

RobotFramework测试框架(1)--官网示例

示例 项目 RF官网提供了几个例子 Examples Overview | ROBOT FRAMEWORK Vehicle Insurance App 根据下面的例子可以看到&#xff0c;RF的测试文件&#xff0c;包含 *** Settings ***-用来引入库和资源 *** Variables *** 用来指定变量&#xff0c;在测试用例中可使用${}来…

Java开发大厂面试第17讲:MySQL 的优化方案有哪些?数据库设计、查询优化、索引优化、硬件和配置优化等

性能优化&#xff08;Optimize&#xff09;指的是在保证系统正确性的前提下&#xff0c;能够更快速响应请求的一种手段。而且有些性能问题&#xff0c;比如慢查询等&#xff0c;如果积累到一定的程度或者是遇到急速上升的并发请求之后&#xff0c;会导致严重的后果&#xff0c;…

字母异位词分组-力扣

首先想到的解法是调用上道题写好的 有效的字母异位词 函数&#xff0c;来对strs中的字符串进行两两判断&#xff0c;然后添加到不同的vector&#xff0c;但转眼一想这样写无疑过于麻烦。在想到上提另一种解法排序后&#xff0c;本题也可以采用排序的方法来做&#xff0c;遍历st…

变分自动编码器(VAE)深入理解与总结

本文导航 0 引言1 起源1.1 自编码器的任务定义1.2 自编码器存在的问题1.3 VAE的核心思路 2 VAE的建模过程2.1 VAE的任务定义2.2 真实分布 ϕ \phi ϕ是什么&#xff0c;为什么要逼近这个分布的参数&#xff0c;如何做&#xff1f;2.3 “重参数化&#xff08;Reparameterization…

互联网十万个为什么之 什么是Kubernetes(K8s)?

Kubernetes&#xff08;通常简称为K8s&#xff09;是一款用于自动部署、扩缩和管理容器化应用程序的开源容器编排平台。Kubernetes已发展为现代企业实现敏捷开发、快速迭代、资源优化及灵活扩展的关键技术组件之一。它拥有庞大的开源社区和丰富的生态系统。围绕Kubernetes已经形…

.lib .a .dll库互转

编译 mingw工具&#xff0c;gendef.exe转换dll为a&#xff0c;reimp转换lib为adlltool.exe --dllname python38.dll --def python38.def --output-lib libpython38.adlltool -k -d crypto.lib -l crypto.a 创作不易&#xff0c; 小小的支持一下吧&#xff01;

koa使用ws,scoket.io建立websocket连接,断开重连

1.使用ws建立socket连接&#xff0c;ws兼容性比socket.io要好一些 koa.js const Koa require(koa); // 引入 Koa 框架 const http require(http); // 引入 Node.js 的 http 模块 const { WebSocketServer } require(ws); // 引入 ws 模块中的 WebSocketServer const cors…

QT之常用控件

一个图形化界面当然需要有各种各样的控件&#xff0c;QT也不例外&#xff0c;在QT designer中就有提供各种各样的控件&#xff0c;用以开发图形化界面。 而想使用好一个QT控件&#xff0c;就需要了解这些控件。 QWidget 在QT中&#xff0c;所有控件都继承自 QWidget 类&…

推荐10款优秀的组件库(一)

1.Ant Desgin UI 网址&#xff1a; https://ant-design-mobile.antgroup.com/zh Ant Design - 一套企业级 UI 设计语言和 React 组件库 "Ant Design Mobile"是一个在线的移动端Web体验平台&#xff0c;让你探索移动端Web的体验极限。 添加图片注释&#xff0c;不…

622.设计循环队列

typedef struct {int* a;int head;int tail;int k; } MyCircularQueue;bool myCircularQueueIsEmpty(MyCircularQueue* obj); bool myCircularQueueIsFull(MyCircularQueue* obj);//初始化 MyCircularQueue* myCircularQueueCreate(int k) {MyCircularQueue* obj(MyCircularQue…

CSS3开发实践难点

目录 响应式设计与流体布局动画与交互性能优化CSS预处理器与后处理器CSS-in-JSCSS高级技巧视觉与滤镜效果工具与工作流实验性响应式设计与流体布局 媒体查询(M

.cc和.cpp文件的区别

在C编程中&#xff0c;文件扩展名为.cpp和.cc的文件实际上没有本质的区别&#xff0c;它们都用于存储C源代码。两种扩展名都可以用于编写C程序&#xff0c;并且在大多数情况下&#xff0c;它们可以互换使用。 一般来说&#xff0c;.cpp扩展名是最常见的用于C源代码文件的标准扩…

linux内核调试技巧四:gdb调试+vmlinux

vmlinux是个elf文件&#xff0c;它的符号表中包含了所有内核符号。 注意linux中很多文件是没有后缀的&#xff0c;比如我见到的这个elf文件的文件名是“vmlinux-3.10.62”&#xff0c;没有后缀。 既然是elf文件那就可以用 点击打开链接 里面的方法直接查看符号表。 要想看得…

SW 草图偏移 先预选

因为有些不能用链全部选,可以先框选要偏移的,再点偏移命令