使用python在服务器上存储blob图像

时间:2016-01-04 19:21:58

标签: django python-3.x blob tinymce-4

我的img src

页面上有blob个标签
<img src="blob:http%3A//mydoma.in/43b92f51-3f04-4027-b6a4-01c5bcc68b2d" />

通过使用TinyMCE 4选项paste_data_images: true粘贴(Ctrl + V)来创建它们。 我想将这些图像上传到我的Python Django服务器(将它们存储为静态和一些处理,例如应用水印)。但问题是我不知道如何获取blob对象,如果我只有一个网址blob:http%3A//mydoma.in/43b92f51-3f04-4027-b6a4-01c5bcc68b2d

1 个答案:

答案 0 :(得分:1)

似乎我不需要这个,因为&#34; blob://&#34; POST到服务器时自动替换为base64数据,所以我只需解析服务器上的base64并将解码后的字节写入磁盘,并将img标签中的src替换为上传的文件URL。

我使用python3 Django,这是我的代码,也许它对某些人有用:

# post.content here is uploaded content of text field
post.content = re.sub(
    r'<img (class=".*?" )?src="data:image/(?P<fmt>.+?);base64,(?P<dat>(?:[A-Za-z0-9+/]{4}){2,}(?:[A-Za-z0-9+/]{2}[AEIMQUYcgkosw048]=|[A-Za-z0-9+/][AQgw]==))".*?>',
    lambda x: proc_blob(post, x), post.content)

def proc_blob(post, mo):
    data = mo.group('dat')
    fmt = mo.group('fmt')
    fname = "{}_{}.{}".format(post.id, str(time.time()).replace('.', '_'), fmt)
    full_name = os.path.join(IMAGES_ROOT, fname)
    fh = open(full_name, "wb")
    fh.write(base64.b64decode(data))
    fh.close()

    # you can apply a watermark here        

    # Optionally in addition we can store image filename in database (for example to remeber what images are related to post)
    im = app.models.Image(post=post, filename=fname)
    im.save()

    return '<img src="/images/{}" class="img-responsive" />'.format(fname)