Python 如何使用aiohttp下载图像?
所以我有一个discord机器人,我正在用它学习Python。我有一个命令,可以下载图像,编辑/合并它们,然后将编辑后的图像发送到聊天室。我以前用Python 如何使用aiohttp下载图像?,python,aiohttp,Python,Aiohttp,所以我有一个discord机器人,我正在用它学习Python。我有一个命令,可以下载图像,编辑/合并它们,然后将编辑后的图像发送到聊天室。我以前用请求来做这件事,但是discord.py的一个库开发人员告诉我,我应该使用aiohttp而不是请求。我在aiohttp中找不到如何下载图像,我试过很多东西,但都不管用 if message.content.startswith("!async"): import aiohttp import random import time
请求
来做这件事,但是discord.py的一个库开发人员告诉我,我应该使用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)
我得到的是一个响应,而不是图像响应您在写入文件时锁定了循环。你需要使用所有文件。
您错过了
等待之前的会话。获取(数据[“卡片图像])
。另外,cardsave
是一个响应,而不是类似文件的对象。您应该手动将字节体从响应复制到文件。
import aiohttp
import aiofiles
async with aiohttp.ClientSession() as session:
url = "http://host/file.img"
async with session.get(url) as resp:
if resp.status == 200:
f = await aiofiles.open('/some/file.img', mode='wb')
await f.write(await resp.read())
await f.close()