上传图像并使用 Flask 将其显示为响应

2023-12-23

我是前端开发的初学者,必须在 Flask 中为项目制作一个小型 Web 应用程序。

我编写了一个 Flask 应用程序,可让您使用 HTML 表单上传图像,然后在单击“上传”时将图像显示给用户。我需要对此进行修改,以便每次用户上传图像时图像不会保存到项目目录中的文件夹中。基本上,应用程序应该将上传的图像发送回响应正文中。

到目前为止,这是我的代码:

上传测试.py

import os


from uuid import uuid4

from flask import Flask, request, render_template, send_from_directory

app = Flask(__name__)
# app = Flask(__name__, static_folder="images")



APP_ROOT = os.path.dirname(os.path.abspath(__file__))

@app.route("/")
def index():
    return render_template("upload.html")

@app.route("/upload", methods=["POST"])
def upload():
    target = os.path.join(APP_ROOT, 'images/')
    print(target)
    if not os.path.isdir(target):
            os.mkdir(target)
    else:
        print("Couldn't create upload directory: {}".format(target))
    print(request.files.getlist("file"))
    for upload in request.files.getlist("file"):
        print(upload)
        print("{} is the file name".format(upload.filename))
        filename = upload.filename
        destination = "/".join([target, filename])
        print ("Accept incoming file:", filename)
        print ("Save it to:", destination)
        upload.save(destination)

    return render_template("complete.html", image_name=filename)

@app.route('/upload/<filename>')
def send_image(filename):
    return send_from_directory("images", filename)

if __name__ == "__main__":
    app.run(port=8080, debug=True)

upload.html - 创建上传表单

<!DOCTYPE html>
<html>
<head>
<title>Upload</title>
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
</head>
<body>

<form id="upload-form" action="{{ url_for('upload') }}" method="POST" enctype="multipart/form-data">

    <strong>Files:</strong><br>
    <input id="file-picker" type="file" name="file" accept="image/*" multiple>
    <div id="msg"></div>
    <input type="submit" value="Upload!" id="upload-button">
</form>
</body>
<script>

    $("#file-picker").change(function(){

        var input = document.getElementById('file-picker');

        for (var i=0; i<input.files.length; i++)
        {

            var ext= input.files[i].name.substring(input.files[i].name.lastIndexOf('.')+1).toLowerCase()

            if ((ext == 'jpg') || (ext == 'png'))
            {
                $("#msg").text("Files are supported")
            }
            else
            {
                $("#msg").text("Files are NOT supported")
                document.getElementById("file-picker").value ="";
            }

        }


    } );

</script>
</html>

Complete.html - 在用户点击“上传”后显示保存文件夹中的图像

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
Uploaded
<img src=" {{url_for('send_image', filename=image_name)}}">
</body>
</html>

我已经尝试进行了相当多的研究,但除了在显示文件夹后删除它之外找不到任何其他东西(我认为这不是解决当前问题的正确方法)。我真的很感激在这件事上的任何帮助,如果有比我的代码当前所做的更好的解决方案,我很乐意了解更多!

谢谢你! :)


请检查以下代码可以帮助您。将以下代码复制到upload.html in templates folder.

<!DOCTYPE html>

<html>
<head>
<link class="jsbin" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/base/jquery-ui.css" rel="stylesheet" type="text/css" />
<script class="jsbin" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script class="jsbin" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.0/jquery-ui.min.js"></script>
<meta charset=utf-8 />

 <script src="{{ url_for('static', filename='upload.js') }}"></script>

<style>
  article, aside, figure, footer, header, hgroup, 
  menu, nav, section { display: block; }
</style>
</head>
<body>
<form action = "http://127.0.0.1:5000/uploader" method = "POST" 
 enctype = "multipart/form-data">
  <input type='file' name = 'file' onchange="readURL(this);" />
    <img id="blah" src="#" alt="your image" />
 <input type = "submit"/>
</form>
</body>
</html>

将以下代码复制到upload.js文件输入static folder

function readURL(input) {
if (input.files && input.files[0]) {
    var reader = new FileReader();

    reader.onload = function (e) {
        $('#blah')
            .attr('src', e.target.result)
            .width(150)
            .height(200);
    };

    reader.readAsDataURL(input.files[0]);
}
}

现在将以下代码复制到 python 文件中

from flask import Flask, render_template, request
from werkzeug import secure_filename
import os 

app = Flask(__name__)

app.config['UPLOAD_FOLDER'] = 'D:/Projects/flask/image_upload/images/'

@app.route('/')
def upload_f():
   return render_template('upload.html')

@app.route('/uploader', methods = ['GET', 'POST'])
def upload_file():
   if request.method == 'POST':
      f = request.files['file']
      f.save(os.path.join(app.config['UPLOAD_FOLDER'],secure_filename(f.filename)))
      return 'file uploaded successfully'

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

上面的代码将帮助您在 html 页面上浏览和显示图像,并将图像保存在磁盘上所需的位置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

上传图像并使用 Flask 将其显示为响应 的相关文章

  • 将数字转换为整数列表[重复]

    这个问题在这里已经有答案了 我该如何写magic下面的函数 gt gt gt num 123 gt gt gt lst magic num gt gt gt gt gt gt print lst type lst 1 2 3
  • 为什么我的 onclick 事件自动触发

    加载页面时最初显示 Hello World 我希望它仅在单击按钮后显示 我知道我可以通过向按钮添加内联事件侦听器来做到这一点 我可以只用脚本编写所有这些代码吗
  • Python 中嵌套列表的排序和分组

    我有以下数据结构 列表的列表 4 21 1 14 2008 10 24 15 42 58 3 22 4 2somename 2008 10 24 15 22 03 5 21 3 19 2008 10 24 15 45 45 6 21 1 1
  • 如何使用appium自动化Android手机后退按钮

    我正在使用 Appium python 客户端库 对 Android 上的混合移动应用程序进行测试自动化 我无法找到任何方法来自动化或创建手势以使用 电话后退 按钮返回到应用程序的上一页 有没有可以使用的驱动函数 我尝试了 self dri
  • python - 将cookie添加到cookiejar

    如何在 python 中创建 cookie 并将其添加到 CookieJar 实例 我拥有 cookie 的所有信息 名称 值 域 路径等 但我不想通过 http 请求提取新的 cookie 我尝试了这个 但看起来 SimpleCookie
  • 为什么最简单的 requests_mock 示例在 pytest 中失败?

    我有一个特殊的问题requests mock 我想用它pytest测试我的 API 包装器库 我尝试过使用requests mock 文档中的第一个示例 http requests mock readthedocs io en latest
  • 如何使直方图列的宽度都相同

    我在操作直方图时遇到了一些麻烦 我有一个包含两列的 df 我将它们绘制为堆叠直方图 我将它们放入特定的垃圾箱中 请参阅下面的代码 但我想在最后制作一个大垃圾箱 4000 10000 但是 默认情况下 大垃圾箱的列宽很大 有没有办法让这个大垃
  • 进行异步调用时,“yield”在龙卷风中如何工作?

    最近我在学习龙卷风简介 我遇到了以下代码 class IndexHandler tornado web RequestHandler tornado web asynchronous tornado gen engine def get s
  • 将视频上传/保存到数据库或文件系统

    我以前从未尝试过保存视频 所以我对此了解不多 我知道如果视频很小 我可以转换为字节数组并保存到数据库 但是为了提高效率 我想了解如何将任何上传的视频保存到我的服务器文件中 然后只保存该文件的文件路径我的数据库表中的视频 我完全不知道如何开始
  • 在IOS中,引导模式中的iframe无法滚动

    我在引导程序模态体内有一个 iframe div class modal fade div class modal dialog div class modal content div class modal header div div
  • pandas-更改重采样时间序列的开始和结束日期

    我有一个时间序列 我将其重新采样到这个数据框中df 我的数据是从6月6日到6月28日 它希望将数据从6月1日延长到6月30日 计数列仅在较长时间内具有 0 值 而我的实际值是从 6 日到 28 日 Out 123 count Timesta
  • 枚举上的 random.choice

    我想用random choice on an Enum I tried class Foo Enum a 0 b 1 c 2 bar random choice Foo 但是这段代码失败了KeyError 我怎样才能随机选择一个成员Enum
  • Python 包安装:pip 与 yum,还是两者一起安装?

    我刚刚开始管理 Hadoop 集群 我们使用 Bright Cluster Manager 直至操作系统级别 CentOS 7 1 然后使用 Ambari 以及适用于 Hadoop 的 Hortonworks HDP 2 3 我不断收到安装
  • 如何从 IDLE 命令行运行 Python 脚本?

    在 bash shell 中 我可以使用 bash 或 source 手动调用脚本 我可以在 Python IDLE 的交互式 shell 中做类似的事情吗 我知道我可以转到文件 gt gt 打开模块 然后在单独的窗口中运行它 但这很麻烦
  • 在 Python 中伪造一个对象是否是类的实例

    假设我有一堂课FakePerson它模仿基类的所有属性和功能RealPerson 不扩展它 在Python 3中 是否可以伪造isinstance 为了认识到FakePerson as a RealPerson只通过修改对象FakePers
  • python 相当于 sed

    有没有一种方法 无需双循环即可完成以下 sed 命令的操作 Input Time Banana spinach turkey sed i Banana s Toothpaste file Output Time BananaToothpas
  • 设置字符串中单词或字符数的限制

    假设我有一个字符串元素列表 wordlist hi what s up home diddle mc doo Oh wise master kakarot hello have a da 我希望列表中的每个元素最多包含 3 个单词或 20
  • 混合两个列表的Pythonic方法[重复]

    这个问题在这里已经有答案了 我有两个长度为 n 和 n 1 的列表 a 1 a 2 a n b 1 b 2 b n 1 我想要一个函数作为结果给出一个列表 其中包含两个中的替代元素 即 b 1 a 1 b n a n b n 1 以下方法有
  • html 表格顶部对齐?

    我怎样才能让图像和内容向右顶部对齐 如你所见 我尝试了 valign top table border 0 cellspacing 0 cellpadding 0 tbody tr valign top td valign top img
  • 将 .parquet 编码为 io.Bytes

    目标 将 Parquet 文件上传到 MinIO 这需要将文件转换为字节 我已经能够做到这一点了 csv json and txt bytes data to csv encode utf 8 bytes json dumps self d

随机推荐

  • 无继承的 OOP 重用:这在“现实世界”中有多实用?

    本文描述了一种我觉得很有趣的 OOP 方法 如果对象存在为 封装和通信 通过消息 如果代码重用了怎么办 与继承无关 但是 使用组合 委托 甚至 老式的辅助对象或任何 程序员认为合适的技术 本体并没有消失 但它 与实现分离 最令我震惊的是无需
  • 如何使用 Spring 的 JDBCTemplate 有效执行 IN() SQL 查询?

    我想知道是否有一种更优雅的方法来使用 Spring 的 JDBCTemplate 进行 IN 查询 目前我正在做类似的事情 StringBuilder jobTypeInClauseBuilder new StringBuilder for
  • JavaFX 没有 TouchEvents

    在我的 Windows Surface Go 2 平板电脑上 我无法检索任何 多点触控 触摸事件 我尝试了几个 Java FX 版本 即使使用 JavaFX 17 及更早版本 也不会生成 TouchEvents 事件 仅生成鼠标事件 是否需
  • 每10秒自我更新一次的小部件Handler.postDelayed问题

    我正在尝试使工作成为 Android 小部件中的自我更新功能 就像每 10 秒更改它的两个 TextView 一样简单 理想的解决方案是使其类似于精灵小部件 新闻和天气 到目前为止 它工作正常 它通过 Handler postDelayed
  • Pycharm 设置 Mysql 数据库驱动程序

    我正在尝试在 pycharm 中设置 mysql 数据库连接 我已经创建了架构并且它可以在 django 等中工作 我试图将数据源直接导入到 pycharm 但出现以下错误 Connection to Exception in thread
  • 为什么 smartcast 不能处理这种情况?

    我有一些与此结构类似的代码 private fun test Double val a Double 15 0 val b Double 20 0 return if a null b null 0 else if a null b nul
  • 我的主函数反汇编中所有这些奇怪的汇编指令是什么?

    所以我有这个主要功能 它会产生很多奇怪的指令 我使用的是 Visual Studio 2019 并且处于调试模式 因此禁用了优化 这些指令是做什么的 int main 00D340E0 push ebp 00D340E1 mov ebp e
  • 使用自定义 Comparer 的 OrderBy 的 Linq 语法

    对于带有自定义排序比较器的任何给定 Linq 表达式 有两种格式 Format 1 var query source Select x gt new x someProperty x otherProperty OrderBy x gt x
  • jQuery fadeIn '慢' 立即出现

    我试图做到这一点 以便当您单击链接时 它会删除一个 div 带有一些段落和文本 并插入另一个 div 带有一些段落和一些文本 我正在使用 jQuery 来淡入和淡出它们 当您单击链接时 原始 div 会淡出 然后我有一个 switch ca
  • 如何从 GooglePicker 上选定的文件中获取 blob

    我正在使用 GooglePicker 和 React 我得到的结果是一个对象数组 id 1 m serviceId docs mimeType image jpeg name name jpg description type photo
  • 带有纹理背景的 CSS 之字形边框

    我一直在研究带有锯齿形边框的标题 一种方法是使用图像来制作之字形效果 1 有没有办法在CSS中创建一个实用的跨浏览器之字形边框而不使用图像 我还尝试在该标题上放置一个延伸到之字形的纹理背景 但是 标题的垂直尺寸可能会改变 并且我无法将标题实
  • 单击按钮时滚动视图向上和向下滚动[重复]

    这个问题在这里已经有答案了 可能的重复 以编程方式滚动 UIScrollView https stackoverflow com questions 2234875 programmatically scroll a uiscrollvie
  • Mac Swampy(Python学习模块)安装

    我想教我的孩子们编程 并且正在使用 Downey 的 Think Python 这本书很棒 除了他安装 Swampy 一个类似海龟的学习模块时 我花了几个小时试图弄清楚 现在我需要帮助 任何人都可以提供有关如何安装 Swampy 的清晰 分
  • asp.net mvc 并检查用户是否登录

    我是 ASP NET MVC 新手 我需要检查用户是否在我的应用程序中登录 因此我将以下代码放在我的 global asax 中 void Application PreRequestHandlerExecute object sender
  • 无效写入——Valgrind

    您好 我在我的 c 程序中遇到了 munmap chunk invalid point 错误 主要问题是 我什至不确定指针可能变得无效的所有方式是什么 我已经检查了我的代码中是否有没有足够空间调用的字符串 但没有发现任何看起来会超出范围的情
  • GDB:在头文件中的模板类函数中设置断点时出错

    我使用了两个不同版本的 GDB 都在以下代码中出现问题 删减代码MyFile h template
  • PHP Markdown 中如何将单个换行符视为真正的换行符?

    我正在读书http github github com github flavored markdown http github github com github flavored markdown 我想在 PHP Markdown 中实
  • C 中全局变量总是初始化为零吗? [复制]

    这个问题在这里已经有答案了 include
  • Liquibase - 常用列?

    在我的数据库中 每个表都有 4 个公共列 DATE CREATED USER CREATED DATE MODIFIED USER MODIFIED 并且我想将此规则隐式传播到所有新表 是否可以在无需手动生成 liquibase 脚本的情况
  • 上传图像并使用 Flask 将其显示为响应

    我是前端开发的初学者 必须在 Flask 中为项目制作一个小型 Web 应用程序 我编写了一个 Flask 应用程序 可让您使用 HTML 表单上传图像 然后在单击 上传 时将图像显示给用户 我需要对此进行修改 以便每次用户上传图像时图像不