我正在使用Django Rest Framework的API,我需要在我的数据库中存储图像的完整URL。我认为以这种方式通过json发送它是最容易的。
我从POST请求中收到图像。我正在使用RESTfull工具客户端进行测试,我在视图post
方法中得到类似的内容:
<InMemoryUploadedFile: profile_1.jpg (image/jpeg)>
在我的模型中,我有这个:
photo_url = models.URLField(null=True)
我最初的想法是将它存储在外部服务器并存储网址,但现在我需要将图像存储在我自己的服务器中,但只存储我的数据库中的网址。我怎样才能做到这一点?谢谢!
答案 0 :(得分:0)
我通过以下方式实现了这一目标:
def get_encoded_image(encoded_image=None):
"""
Save the received in request base64 encoded image and return the image path to serve.
"""
_file = str(encoded_image)
_file = base64.b64decode(_file)
path = default_storage.save('{folder}/{file_name}.{extension}'.format(folder=settings.DEFAULT_PROFILE_IMAGES_FOLDER,
file_name=time.time().__str__(),
extension='jpg'),
ContentFile(_file))
if settings.DEBUG:
image_url = urljoin(settings.DEV_DOMAIN, '{media}{path}'.format(media=settings.MEDIA_URL,
path=path))
else:
image_url = urljoin(settings.DOMAIN, '{media}{path}'.format(media=settings.MEDIA_URL,
path=path))
return image_url
我在POST请求中收到了用base64编码的图像。我使用.time模块获取一个唯一的名称,但Django在文件名的末尾添加了一个哈希,如果另一个名称相同的话。
注意变量如:
DEFAULT_PROFILE_IMAGES_FOLDER
:用于存储图像的文件夹的名称(在media
文件夹内)。DEBUG
:Django的调试变量。DEV_DOMAIN
:就我而言,这是我的http://localhost:8000
DOMAIN
:服务器运行应用程序的IP或域。