使用 python 在服务器上存储 blob 图像
Store blob image on server with python
我的页面上有 img
个标签 blob
src
<img src="blob:http%3A//mydoma.in/43b92f51-3f04-4027-b6a4-01c5bcc68b2d" />
它们是通过使用 TinyMCE 4 选项粘贴 (Ctrl+V) 创建的 paste_data_images: true
。
我想将这些图像上传到我的 Python Django 服务器(将它们存储为静态和一些处理,例如应用水印)。但问题是我不知道如何获取 blob 对象,如果我只有 url blob:http%3A//mydoma.in/43b92f51-3f04-4027-b6a4-01c5bcc68b2d
好像我不需要这个因为"blob://" 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)
我的页面上有 img
个标签 blob
src
<img src="blob:http%3A//mydoma.in/43b92f51-3f04-4027-b6a4-01c5bcc68b2d" />
它们是通过使用 TinyMCE 4 选项粘贴 (Ctrl+V) 创建的 paste_data_images: true
。
我想将这些图像上传到我的 Python Django 服务器(将它们存储为静态和一些处理,例如应用水印)。但问题是我不知道如何获取 blob 对象,如果我只有 url blob:http%3A//mydoma.in/43b92f51-3f04-4027-b6a4-01c5bcc68b2d
好像我不需要这个因为"blob://" 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)