如何将Bytes对象转换为_io.BytesIO python



我正在制作一个简单的烧瓶API,用于上传图像并执行一些进程,然后将其以二进制形式存储在数据库中,然后我想使用send_file()函数下载它,但当我传递像字节一样的图像时,它会给我一个错误:

return send_file(BytesIO.read(image.data), attachment_filename='f.jpg', as_attachment=True) TypeError: descriptor

"read"需要"_io.BytesIO"对象,但收到了"bytes">

和我上传图像的代码如下:

@app.route('/upload', methods=['POST'])
def upload():
images = request.files.getlist('uploadImages')
n = 0
for image in images:
fileName = image.filename.split('.')[0]
fileFormat = image.filename.split('.')[1]
imageRead = image.read()
img = BytesIO(imageRead)
with graph.as_default():
caption = generate_caption_from_file(img)
newImage = imageDescription(name=fileName, format=fileFormat, description=caption,
data=imageRead)
db.session.add(newImage)
db.session.commit()
n = n + 1
return str(n) + ' Image has been saved successfully'

我下载图像的代码:

@app.route('/download/<int:id>')
def download(id):
image = imageDescription.query.get_or_404(id)
return send_file(BytesIO.read(image.data), attachment_filename='f.jpg', as_attachment=True)

有人能帮忙吗???

您似乎对io.BytesIO感到困惑。让我们来看看使用BytesIO的一些示例。

>>> from io import BytesIO
>>> inp_b = BytesIO(b'Hello World', )
>>> inp_b
<_io.BytesIO object at 0x7ff2a71ecb30>
>>> inp.read() # read the bytes stream for first time
b'Hello World'
>>> inp.read() # now it is positioned at the end so doesn't give anything.
b''
>>> inp.seek(0) # position it back to begin
>>> BytesIO.read(inp) # This is same as above and prints bytes stream
b'Hello World'
>>> inp.seek(0)
>>> inp.read(4) # Just read upto four bytes of stream. 
>>> b'Hell'

这将使您了解readBytesIO上的工作原理。我想你需要做的就是这个。

return send_file(
BytesIO(image.data),
mimetype='image/jpg',
as_attachment=True,
attachment_filename='f.jpg'
)

最新更新