python 图片read()后为什么再存储save()就是空文件了?

问题描述

python flask 图片得上传和保存。
需要验证图片得md5值,为什么文件read后,再save时,图片大小为0呢?

相关代码

imagefile = request.files.get('upimage') #上传的图片
md5img = hashlib.md5(imagefile.read()).hexdigest() #图片的md5
imagefile.save(file_path) #保存图片

注:如果没有第二行代码↓↓就一切正常。如果加上后,存储的图片大小为0

md5img = hashlib.md5(imagefile.read()).hexdigest() #图片的md5

请问是什么原因?

阅读 6.3k
2 个回答

file_obj 被 read 后,文件指针会指到最后,
这时,你执行 save 操作,会从当前指针(也就是文件最后)读取内容,
自然读取到的就是空的内容了,保存的也是空的图片。

解决办法很简单:

# 读取后,执行下这个就可以了
# 重新定义指针到文件开头
imagefile.seek(0)
 imagefile是类似.  file object, io. buffer,read() 之后就空了。。。。。我猜测,就讨论讨论.

以下来自于
Flask web development, one drop at a time.
API:Flask.request.files

A MultiDict with files uploaded as part of a POST or PUT request. Each file is stored as FileStorage object. It basically behaves like a standard file object you know from Python, with the difference that it also has a save() function that can store the file on the filesystem.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题