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

我正在制作一个简单的Flask 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)

任何人都可以帮忙吗???


慕村9548890
浏览 1659回答 1
1回答

鸿蒙传说

看来你很困惑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 timeb'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 streamb'Hello World'>>> inp.seek(0)>>> inp.read(4) # Just read upto four bytes of stream.&nbsp;>>> b'Hell'read这应该能让您了解on 的工作原理BytesIO。我认为你需要做的是这个。return send_file(&nbsp; &nbsp; BytesIO(image.data),&nbsp; &nbsp; mimetype='image/jpg',&nbsp; &nbsp; as_attachment=True,&nbsp; &nbsp; attachment_filename='f.jpg')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python