如何用aiohttp下载图片?
问题描述:
所以我有一个不协调的机器人,我正在玩Python学习。我有一个下载图像并编辑/合并它们的命令,然后将编辑后的图像发送给聊天。我以前使用requests
来做到这一点,但是我被其中一位图书馆开发者告知discord.py我应该使用aiohttp
而不是requests
。我找不到如何在aiohttp
下载图片,我试过了一堆东西,但没有一个可以工作。如何用aiohttp下载图片?
if message.content.startswith("!async"):
import aiohttp
import random
import time
import shutil
start = time.time()
notr = 0
imagemake = Image.new("RGBA",(2048,2160))
imgsave = "H:\Documents\PyCharmProjects\ChatBot\Images"
imagesend = os.path.join(imgsave,"merged.png")
imgmergedsend =os.path.join(imgsave,"merged2.png")
with aiohttp.ClientSession() as session:
async with session.get("http://schoolido.lu/api/cards/788/") as resp:
data = await resp.json()
cardsave = session.get(data["card_image"])
with open((os.path.join(imgsave, "card.png")),"wb") as out_file:
shutil.copyfileobj(cardsave, out_file)
是我现在所拥有的,但仍然不起作用。
那么,有没有办法下载图片?
答
所以我想通了,前一阵子:
if message.content.startswith("!async2"):
import aiohttp
with aiohttp.ClientSession() as session:
async with session.get("http://schoolido.lu/api/cards/788/") as resp:
data = await resp.json()
card = data["card_image"]
async with session.get(card) as resp2:
test = await resp2.read()
with open("cardtest2.png", "wb") as f:
f.write(test)
我得到的回应,而不是一个图像响应
您以前'session.get错过'await'(数据[“card_image “])'。 'cardsave'是一个响应,而不是类似文件的对象。您应该将响应中的字节主体手动复制到文件。 –