簡體   English   中英

使用 urllib3 下載時不支持圖像文件類型

[英]Image file type is not supported when downloading using urllib3

嗨,我正在下載這樣的圖像

import urllib3     

http = urllib3.PoolManager()
r = http.request('GET', 'https://i.picsum.photos/id/192/536/354.png?hmac=a22QkdSZ7zXUHpV4-gnB48PPYaLlcvaTMeDXxcPRxs8')
print(r.data)

然后使用它上傳到s3

 s3 = boto3.resource(s3')
    key = 'file_name + '.png'    
    bucket = s3.Bucket(bucket_name)
    bucket.upload_fileobj(io.BytesIO(r.data), key) 

但是當我打開時,當我使用照片打開器打開圖像時出現錯誤“不支持文件類型”

**EDIT:** I did as suggested by passing
 ContentType='text/png' 

當我通過 url 打開圖像時,在 aws 上得到了這個:我使用 presinged url 打開了這個

在此處輸入圖像描述

您實際上並未提及如何添加ContentType 這是工作示例,使用boto3.resource()

bucketname = <my-bucket>
filename   = <filename>

s3 = boto3.resource('s3')
key = 'image.png'
bucket = s3.Bucket(bucketname)
with open(filename, "rb") as fd:
    bucket.upload_fileobj(
        fd,
        Key=key,
        ExtraArgs={
            "ContentType": "image/png",
        }
    )

然后我生成一個預簽名的 URL (你沒有包括在內,但只要你獲得正確的權限,我相信你很好)

expiration = 3600
s3 = boto3.client('s3',
                  region_name='us-east-2',
                  config=boto3.session.Config(signature_version='s3v4'))
response = s3.generate_presigned_url(
    'get_object',
    Params={
        'Bucket': bucketname,
        'Key': key
    },
    ExpiresIn=expiration
)
print(response)

在我的瀏覽器中打開生成的 URL ,它會加載我上傳的 PNG 圖像。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM