【问题标题】:How to convert blob into byteArray in flask python?如何在烧瓶 python 中将 blob 转换为 byteArray?
【发布时间】:2015-04-01 03:46:53
【问题描述】:

一位客户向我发送了一个多部分文件,我阅读了它:

    blob = request.files['file'].read()

我手头有一个 blob 文件。现在我必须用open('file.png', 'rb') 之类的请求发送这个文件。如何将blob 转换为rb 模式。使用 open 我无法直接打开 blob。

以下代码无效:

opened_file = open(request.files['file'], 'rb')

我收到以下错误:

TypeError: coercing to Unicode: need string or buffer, FileStorage found

有没有办法做到这一点不将其保存在文件系统中?我将请求发送到其他地方:

files = dict({'file': byteArrayFile})
r = requests.post(self.url, files=files, headers=headers)

【问题讨论】:

    标签: python bytearray blob data-conversion


    【解决方案1】:

    request.files['file'] 已经是一个类文件对象(它是a FileStorage instance),所以你可以直接使用它;你不需要open它。

    r = requests.post(self.url, files={"file": request.files["file"]}, headers=headers)
    

    您可以将类似文件的对象视为打开的文件。他们的行为方式相同。

    【讨论】:

      【解决方案2】:

      尝试使用

      from PIL import Image
      import requests
      from io import BytesIO
      
      response = requests.get(url)
      img = Image.open(BytesIO(response.content))
      

      它对我有用,如果你想看看图片,可以试试

      img.show()
      

      【讨论】:

        【解决方案3】:

        如果您的图像以 Blob 格式存储(即在数据库中),您可以使用 Billal Begueradj 解释的相同技术将图像从 Blob 转换为字节数组。

        就我而言,我需要将图像存储在 db 表的 blob 列中:

        def select_all_X_values(conn):
            cur = conn.cursor()
            cur.execute("SELECT ImageData from PiecesTable")    
            rows = cur.fetchall()    
            return rows
        

        然后我创建了一个辅助函数来将我的数据集更改为 np.array:

        X_dataset = select_all_X_values(conn)
        imagesList = convertToByteIO(np.array(X_dataset))
        
        def convertToByteIO(imagesArray):
            """
            # Converts an array of images into an array of Bytes
            """
            imagesList = []
        
            for i in range(len(imagesArray)):  
                img = Image.open(BytesIO(imagesArray[i])).convert("RGB")
                imagesList.insert(i, np.array(img))
        
            return imagesList
        

        之后,我可以在我的神经网络中使用 byteArrays。

        plt.imshow(imagesList[0])
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-08
          • 1970-01-01
          • 1970-01-01
          • 2010-10-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多