簡體   English   中英

類型錯誤:預期的 str、bytes 或 os.PathLike 對象,而不是 ImageFieldFile

[英]TypeError: expected str, bytes or os.PathLike object, not ImageFieldFile

我正在嘗試將文件上傳到另一台服務器。 我正在嘗試這樣做:

 package = Package.objects.get(id=package_id)
 with open(package.logo_image.image, 'rb') as image_handle:
        image_data = bytes(image_handle.read())
        image = {
            'type': 'IMAGE',
            'data': image_data,
            'xsi_type': 'Image'
        }
        logo_image = media_service.upload(image)[0]

模型中的字段:

image = models.ImageField(upload_to=generate_file_path, null=True, blank=True)

嘗試運行此代碼后,我得到:

with open(package.logo_image.image, 'rb') as image_handle: TypeError: expected str, bytes or os.PathLike object, not ImageFieldFile

轉換為str()沒有幫助。

是否可以以二進制模式打開此文件? 謝謝!

您根本不需要打開文件。 ImageField(和 FileField)使您可以直接訪問底層文件對象。

package = Package.objects.get(id=package_id)
image_data = bytes(package.logo_image.image.read())

可以打開ImageField類型的關系以將文件作為二進制數據讀取。 對於您的示例,這將使用以下語法:

package.logo_image.image.open(mode='rb')

一個有用的情況是,如果您想使用ImageField的圖像來使用請求模塊發布數據,例如:

file_list = [
    ('image[data]', (
        'image.jpg',
        package.logo_image.image.open(mode='rb'), 
        'image/jpg')
    ),
]
resp = requests.post(
        "http://example.com/image-ingester"
        files=file_list
 )

這在 Django 的FileField API 文檔( 鏈接)下進行了描述。

暫無
暫無

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

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