检查Flask上传用户是否未选择文件

6 投票
3 回答
15303 浏览
提问于 2025-04-18 06:15

如果用户在表单中没有选择文件(这对应于 PHP中的UPLOAD_ERR_NO_FILE),那么 request.files['file'] 也会返回一个 FileStorage 对象。我现在是用 request.files['file'].filename == '' 来检查,这样做有没有更好的方法呢?我看过 Flask文档,但没找到答案。

另外,'file' in request.files 在用户没有选择文件的情况下是无法工作的,因为浏览器会提交一个长度为0且文件名为空(即'')的部分。

还有,我该如何检测上传的文件是否只部分上传了(这对应于PHP中的 UPLOAD_ERR_PARTIAL)?

3 个回答

0

在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后在程序中使用它。这个过程就像是从冰箱里拿食材,然后用这些食材做饭一样。

有些时候,我们会遇到一些问题,比如数据格式不对,或者程序运行时出错。这就像是你在做饭时发现缺少某种调料,或者锅坏了,导致你无法继续做下去。

为了避免这些问题,程序员通常会写一些代码来检查数据是否正确,或者在程序出错时给出提示。这就像是在做饭前先检查一下冰箱里的食材是否新鲜,或者准备好备用的锅。

总之,编程就像做饭一样,需要仔细准备和处理,才能做出美味的“菜肴”。

import imghdr

def validate_image(stream):
    header = stream.read(512)
    stream.seek(0)
    format = imghdr.what(None, header)
    if not format:
        return None
    return '.'+format

class UploadFiles(Resource):
   def post(self):
      doc=request.files.get('image')
      if  validate_image(doc.stream):
         print('file validated')
7

试试这个:

if not request.files.get('file', None):
    pass

如果你想对文件有更多的控制,可以使用这个链接:http://pythonhosted.org/Flask-Uploads/

17

现在我正在使用

if request.files['file'].filename == '':
    return 'No selected file'

或者使用文件长度检查

import os

file = request.files['file']
file.seek(0, os.SEEK_END)
if file.tell() == 0:
    return 'No selected file'

撰写回答