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

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

本文介绍在 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 相关产品和应用

全部下载

专题列表