如何用aiohttp下载图片?

如何用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) 

是我现在所拥有的,但仍然不起作用。

那么,有没有办法下载图片?

+0

您以前'session.get错过'await'(数据[“card_image “])'。 'cardsave'是一个响应,而不是类似文件的对象。您应该将响应中的字节主体手动复制到文件。 –

所以我想通了,前一阵子:

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) 

我得到的回应,而不是一个图像响应