如何将blob转换为flask python中的byteArray?

时间:2015-02-02 08:28:33

标签: python bytearray blob data-conversion

客户向我发送一个多部分文件,我用以下内容阅读:

    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)

3 个答案:

答案 0 :(得分:1)

尝试使用

from PIL import Image
import requests
from io import BytesIO

response = requests.get(url)
img = Image.open(BytesIO(response.content))

它对我有用,如果您想查看图像,可以进行测试

img.show()

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

就我而言,我需要将图像存储在数据库表的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])