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
    的表

  • 其中将有两个字段userfile,其中file将包含上载图像的路径

  • 现在,您可以像
    File.objects.all()
    那样访问数据库,以从文件表中获取所有行


我已经启动并运行了数据库。问题是我从服务器端上传到客户端。现在,我需要将s3存储桶中上传的文件与文件模型相关联。然后,所有图像路径都将存储在数据库表中。你可以访问它并在应用程序中使用。