Angularjs 将图像从前端应用程序保存到后端API的正确方法

Angularjs 将图像从前端应用程序保存到后端API的正确方法,angularjs,django,django-rest-framework,Angularjs,Django,Django Rest Framework,在我的例子中,我将AngularJS和Django后端与Django Rest框架一起使用。所以我需要用图像保存一个配置文件数据。我在数据库中的模型如下所示: class Profile(models.Model): first_name = models.CharField() avatar = models.ImageField() 但我无法决定在前端保存此图像的最佳方式 解决方案1-将映像转换为base64并在Django中创建base64序列化程序: 对我来说最简单的

在我的例子中,我将AngularJS和Django后端与Django Rest框架一起使用。所以我需要用图像保存一个配置文件数据。我在数据库中的模型如下所示:

class Profile(models.Model):
    first_name = models.CharField()
    avatar = models.ImageField()
但我无法决定在前端保存此图像的最佳方式

解决方案1-将映像转换为base64并在Django中创建
base64序列化程序

对我来说最简单的方法

解决方案2-使用AngularJS上传多部分/表单数据文件

我不喜欢这样的事情:

$http.post(uploadUrl, fd, {
    transformRequest: angular.identity,
    headers: {'Content-Type': undefined} 
}) 
看起来像哈克。后端也一样。我们需要使用

解决方案3-创建单独的视图以上载文件并将数据库更改为

class Image(models.Model):
   image = models.ImageField()

class Profile(models.Model):
    first_name = models.CharField()
    avatar = models.ForeignKey('Image', null=True, blank=True, on_delete=NULL)

在现有数据库上使用它很复杂,但似乎非常灵活。但是,使用解决方案2实现文件上传

发布base64数据对于带宽和内存来说效率低下。最有效的方法是使用。另一种方法是,您可以尝试更改将此图像上载到s3,只将s3返回的链接图像保存在数据库中。发布base64数据对于带宽和内存来说效率很低。最有效的方法是使用。另一种方法,您可以尝试,可能很简单的更改上载此图像到s3,只保存从s3返回的链接图像在数据库中。