Python 如何将通过预签名url上传的文件用户链接到数据库?
这是我保存用户上传文件的方式:Python 如何将通过预签名url上传的文件用户链接到数据库?,python,django,Python,Django,这是我保存用户上传文件的方式: f = request.FILES[x] s = File(file=f, user=curUser) s.save() 这非常有效,但在我的服务器上占用了大量带宽,所以我决定使用预先签名的URL 现在用户直接上传到s3 Bucket,但它并没有链接到数据库 我尝试了在用户成功上传到S3后运行的方法: f = default_storage.open(userID + "/" + fileName) curUser = User.object
f = request.FILES[x]
s = File(file=f, user=curUser)
s.save()
这非常有效,但在我的服务器上占用了大量带宽,所以我决定使用预先签名的URL
现在用户直接上传到s3 Bucket,但它并没有链接到数据库
我尝试了在用户成功上传到S3后运行的方法:
f = default_storage.open(userID + "/" + fileName)
curUser = User.objects.get(userID=userID)
s = File(file=f, user=curUser)
s.save()
f.close()
不过,这只是在用户目录上创建一个新文件夹并将其上载到那里
我的模型:
class User(models.Model):
userID = models.CharField(max_length=101,primary_key=True)
class File(models.Model):
user = models.ForeignKey(to=User, on_delete=models.CASCADE)
file = models.FileField(max_length=255, upload_to=user_directory_path)
def user_directory_path(instance, filename):
# file will be uploaded to MEDIA_ROOT/user_<id>/<filename>
path = instance.user.userID + "/" + filename
return path
类用户(models.Model):
userID=models.CharField(最大长度=101,主键=True)
类文件(models.Model):
user=models.ForeignKey(to=user,on_delete=models.CASCADE)
file=models.FileField(最大长度=255,上传到=用户目录路径)
def用户目录路径(实例,文件名):
#文件将上载到媒体\u ROOT/用户_/
path=instance.user.userID+“/”+文件名
返回路径
- 执行此操作后,如果您已经执行了
,然后执行了makemigrations
,则将在数据库中创建名为migrate
的表File
- 其中将有两个字段user和file,其中file将包含上载图像的路径
- 现在,您可以像
那样访问数据库,以从文件表中获取所有行File.objects.all()