Flask接收上传图片方法

本文介绍两种使用Flask框架实现图片上传的方法。一种是通过生成随机字符串确保图片名称的唯一性,另一种则直接使用原始文件名进行保存。两种方法均涉及图片接收、路径定义及保存操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 接下来给搭建讲解Flask如何接受图片文件,上面是复杂写法,下面是简单写法,二选一即可。

思路整理:接收图片->定义一个图片存放的位置->给图片重命名(为了唯一性)->保存操作->返回状态

方案一:下面是复杂的写法:

basedir = os.path.abspath(os.path.dirname(__file__)) #定义一个根目录 用于保存图片用
import os,sys,random,string
from app import app,request,json,url_for


@app.route('/api/v1/ckeditor-upload',methods=['GET','POST'])
def editorData():
    #生成随机字符串,防止图片名字重复
    ran_str = ''.join(random.sample(string.ascii_letters + string.digits, 16))
    #获取图片文件 name = upload
    img = request.files.get('upload')
    #定义一个图片存放的位置 存放在static下面
    path = basedir+"/static/img/"
    #图片名称 给图片重命名 为了图片名称的唯一性
    img_name = ran_str+img.filename
    #图片path和名称组成图片的保存路径
    file_path = path+img_name
    #保存图片
    img.save(file_path)
    #这个是图片的访问路径,需返回前端(可有可无)
    url = '/static/img/'+img_name
    #返回图片路径 到前端
    return url 

方案2:下面是简单写法:

思路:接收图片 ->定义保存路径->获取名称->保存操作

basedir = os.path.abspath(os.path.dirname(__file__)) #定义一个根目录 用于保存图片用

from app import app,request


@app.route('/api/v1/ckeditorUpload',methods=['GET','POST'])
def editorData():
 
    #获取图片文件 name = upload
    img = request.files.get('upload')

    #定义一个图片存放的位置 存放在static下面
    path = basedir+"/static/img/"

    #图片名称 
    img_name = img.filename

    #图片path和名称组成图片的保存路径
    file_path = path+img_name 

    #保存图片
    img.save(file_path)

    #url是图片的路径
    url = '/static/img/'+img_name 
    return url

不懂留言交流

### 实现图片上传功能 为了实现在 Flask Web 应用程序中上传图像的功能,可以创建一个 HTML 表单用于文件输入并提交给服务器处理。在 Python 后端部分,则需利用 `flask` 提供的方法接收这些文件对象。 #### 创建HTML表单 构建一个简单的网页界面让用户可以选择要上载的照片: ```html <form action="/upload" method="post" enctype="multipart/form-data"> <input type="file" name="photo"/> <button type="submit">Upload</button> </form> ``` 此代码片段定义了一个带有文件选择器按钮的表单,当点击 Upload 按钮时会向 `/upload` 路由发送 POST 请求[^1]。 #### 处理上传请求 接下来,在 Flask 中设置路由处理器以接受来自客户端的数据流,并将其保存到本地磁盘或者进一步加工处理: ```python from flask import Flask, request import os app = Flask(__name__) UPLOAD_FOLDER = './uploads' if not os.path.exists(UPLOAD_FOLDER): os.makedirs(UPLOAD_FOLDER) @app.route('/upload', methods=['POST']) def upload_file(): if 'photo' not in request.files: return 'No file part' photo = request.files['photo'] if photo.filename == '': return 'No selected file' filename = secure_filename(photo.filename) path_to_save = os.path.join(app.config['UPLOAD_FOLDER'], filename) photo.save(path_to_save) return f'{filename} has been uploaded successfully.' ``` 上述脚本首先导入必要的模块,初始化应用程序实例以及指定存储位置;随后通过装饰器注册 URL 规则与视图函数之间的映射关系;最后实现了具体的业务逻辑——验证是否存在待上传项、获取该文件句柄、调用 save 方法完成持久化操作[^3]。 值得注意的是,这里还应该加入更多安全措施比如校验 MIME 类型防止恶意攻击者绕过前端过滤机制传递非法内容进来。另外建议使用 Werkzeug 的 `secure_filename()` 函数净化原始名称以免引起路径遍历漏洞等问题[^2]。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值