如何在Django中通过HTTP请求发送回上传的文件?

时间:2018-10-17 15:16:16

标签: python django http django-models django-file-upload

我正在尝试实现从前端上传文件并将其保存在Django后端中的功能。但是,当我尝试从后端检索文件时,我陷入了困境,它实际上只是将路径返回给了我保存的文件,但是我无法通过使用该路径或对该URL使用HTTP.GET来获取它。

model.py

class User(models.Model):
    name = models.CharField(max_length=50)
    image= models.FileField(upload_to='image/', default=None)
    intro= models.FileField(upload_to='info/', default=None) 

view.py

class UserViewSet(viewsets.ModelViewSet):
    serializer_class = LsRequestSerializer
    queryset = User.objects.all()
    http_method_names = ['post']

serializers.py

class UserSerializer(serializers.ModelSerializer):
    class Meta:
         model = User
         field = '__all__'

    def create(self, validated_data):
     newUser = User.objects.create(
         name = validated_data['name']
         image = None
         intro = None
     )
     try validate_data['image']:
        newUser.image = validate_data['image']
     except:
        newUser.image = None

     try validate_data['intro']:
        newUser.image = validate_data['intro']
     except:
        newUser.intro= None
     newUser.save()

     return newUser

这是原始代码,可用于成功上传文件,一旦我发出HTTP.POST请求,该文件就会存在于media文件夹下。

但是,似乎是因为在我的MySQL数据库中,它仅将文件的路径保存为字符串,因此无法打开。

因此,我尝试打开文件并保存到我的对象,然后返回,但是它给出了错误Can't convert 'FieldFile' object to str implicitly

print(MEDIA_ROOT)
print(newUser.image)
f = open(MEDIA_ROOT + newUser.image, 'rb')
newUser.image = f
return newUser

这是因为我必须将http标头中的内容类型设置为“纯文本”吗?

此外,当我返回所有现有用户时,应该如何更改view.py以获取那些文件?

我是否可以将其中的一些对象作为字符串字段发送回整个对象,而其他对象则是文件?

那么输出是什么?

0 个答案:

没有答案