鱼C论坛

 找回密码
 立即注册
查看: 89|回复: 4

使用response=requests.get()下载图片,图片保存为文件时

[复制链接]
发表于 4 天前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
使用response=requests.get()下载图片,图片保存为文件时为什么需要response.iter_content()逐块写入文件?
例如:
for diskStorage in response.iter_content(10240):
    pictFile.write(diskStorage)

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 4 天前 | 显示全部楼层
关于使用 response.iter_content() 逐块写入图片文件的原因

主要出于以下两个核心考量:

1. 内存控制
- 直接使用 response.content 会一次性将整个文件加载到内存
- 大文件(如视频/高清图)可能导致内存溢出(OOM)
- iter_content() 通过分块加载(如10240字节)减少内存峰值

2. 网络稳定性
- 分块写入可应对不稳定的网络连接
- 若中途断开连接,已写入的块数据不会丢失
- 特别适合大文件下载场景
import requests

url = "[url=http://example.com/image.jpg"]http://example.com/image.jpg"[/url]
response = requests.get(url, stream=True)  # 关键参数

with open("image.jpg", "wb") as f:
    for chunk in response.iter_content(10240):  # 分块写入
        if chunk:  # 过滤空块
            f.write(chunk)

注意:必须设置 stream=True 参数才能启用流式传输,否则仍然会强制加载完整内容到内存

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 4 天前 | 显示全部楼层
FishC 发表于 2025-4-4 00:25
关于使用 response.iter_content() 逐块写入图片文件的原因

主要出于以下两个核心考量:

requests.get(url, stream=True) 函数调用是立即返回接着执行后面的代码,还是全部下载完成才返回?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 4 天前 | 显示全部楼层
为了防止文件太大,内存溢出之类的问题

你可以联想浏览器加载超大图片时一块一块加载
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 4 天前 | 显示全部楼层
player-none 发表于 2025-4-4 09:16
为了防止文件太大,内存溢出之类的问题

你可以联想浏览器加载超大图片时一块一块加载

应该是这样了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-8 04:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表