Python 上传图片格式校验:利用 rfind 解决文件名含点号的问题

Hazel
Hazel
发布时间:2026-10-13| 6人浏览过
原创

本文介绍在 Python 图片上传场景中,如何利用字符串的 rfind 方法解决文件名中包含多个点号(如 www.图片1.jpg)导致的格式校验失败问题。通过对比 split 与 rfind 的差异,提供基于后缀截取的安全校验代码示例,确保图片格式判断的准确性。

Python 图片上传格式校验:利用 rfind 解决文件名含点号的问题

经过一段时间的忙碌,终于有空进行技术分享。本次内容聚焦于一个相对基础但常见的问题:在图片上传过程中如何严格限制允许的格式。

首先直接展示核心代码实现。

核心代码实现


img_file = 'D:\\image\\test.jpg'
    # uuid生成文件名
    key = shortuuid.ShortUUID().random(length=9)
    if img_file.size > 2097152:
      raise exceptions.APIException('图片大小超出限制')
    # file_postfix = img_file.name.split('.')[1]
    suffix = img_file.name.rfind('.')
    if suffix == -1:
      raise exceptions.APIException('图片不正确')
    file_postfix = img_file.name[suffix + 1:] 
    if file_postfix not in ['jpg', 'png', 'gif', 'bmp', 'jpeg', 'JPG', 'PNG',
                'BMP', 'JPEG', ]:
      raise exceptions.APIException('图片格式不正确')
    file_name = key + '.' + file_postfix

传统 split 方法的局限性

在以往的项目开发中,通常采用 file_postfix = img_file.name.split('.')[1] 这种方式,即通过 split 分割文件名并取索引为 1 的后缀来判断格式。对于常规命名的文件,例如图片1.jpg、图片2.jpg 或图片3.jpg,这种方法通常能正常工作。然而,当遇到文件名中包含多个点号的情况,例如 www.图片1.jpg 时,该逻辑就会失效,因为 split 方法默认按所有点号分割,导致取到的后缀并非预期的扩展名。

rfind 方法的优势与原理

此时,suffix = img_file.name.rfind('.') 方法提供了更好的解决方案,因为它支持从字符串末尾向前查找。具体示例如下。


 a = '123456'  
 print('下标', a.rfind('5')) 

运行上述代码,输出结果为:下标 4


 a = '123456'  
 print('下标', a.rfind('7'))

若查找不存在的字符,输出结果为:下标 -1

rfind 方法的工作原理是从字符串的最后一个字符开始向前搜索,一旦找到匹配的子串则返回其索引位置;若未找到,则返回 -1。

因此,对于 www.test.jpg 这类文件名,利用 rfind 从末尾定位最后一个点号,截取该点号之后的部分即可得到正确的后缀(如 jpg),从而准确判断格式。

需要特别注意的是,rfind 返回的下标是从 0 开始计数的。因此,在截取后缀字符串时,必须取下标加 1 的位置作为起始点,即 img_file.name[suffix + 1:]。

总结与后续计划

基本逻辑至此已阐述完毕。关于其他细节不再赘述。近期计划更新关于将图片上传至微信服务器的相关技术文章。

总结

以上内容介绍了如何利用 Python 解决图片上传时的格式限制问题,希望能对读者有所帮助。如有任何疑问,欢迎留言交流,作者会及时回复。感谢大家对本网站的支持! 如果本文对您有帮助,欢迎转载,请注明出处,谢谢!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。