我将翻译这段关于IT技术的内容。该API允许客户端发布文件链接,我希望能下载该文件并将其存储在我模型中的
对于视图,我使用了通用的
主要存在两个问题。首先,目前的实现方式会导致文件被复制两次。因为我先将其下载到磁盘上的某个位置,然后当
FileField
中。以下是我的代码:
序列化程序:
from rest_framework import serializers
from django.core.files import File
from rest_framework.serializers import ValidationError
class MySerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = ('url')
def to_internal_value(self, data):
validated = dict()
url = data.get('url')
# do url validation here
# download the file to local disk
validated['file'] = File(open('path/to/downloaded/file'))
validated['url'] = url
return validated
模型:
from django.db import models
class MyModel(models.Model):
url = models.CharField(max_length=255)
file = models.FileField(upload_to='files/')
对于视图,我使用了通用的
ListCreateAPIView
。主要存在两个问题。首先,目前的实现方式会导致文件被复制两次。因为我先将其下载到磁盘上的某个位置,然后当
FileField
存储到数据库中时,它会再次复制文件到files/
文件夹中。有没有什么方法可以避免这种情况?其次,如何异步下载文件,同时在下载完成后能够添加FileField
属性到模型中?