我想创建一个在S3上存储媒体文件的Django服务器,用户可以上传自己的文件,可能都具有相同的文件名,但是是不同的文件。我已成立了S3和得到它通过明确的Python命令工作像使用相同的文件名使用boto3和Django(和S3)上传不同的文件
import boto3
s3 = boto3.resource('s3')
s3.Object('my-bucket','text.txt').put(Body=open('/text.txt', 'rb'))
我建立我的模型是这样的:
import boto3
s3 = boto3.resource('s3')
class MyModel(models.Model):
my_file = models.FileField()
file_url = models.CharField(max_length=200, blank=True, null=True)
在我的views.py,我上传的形式是:
import boto3
s3 = boto3.resource('s3')
...
if form.is_valid():
# creates object from form but doesn't go into database
mymodel = form.save(commit=False)
uploaded_file = request.FILES['my_file']
s3.Object('my-bucket',uploaded_file.name).put(Body=request.FILES['uploaded_file'])
mymodel.file_url = 'http://my-bucket.s3.amazonaws.com/' + uploaded_file.name;
我想用户上传自己的文件,可能都有相同的文件名,但是不同的文件。我可以想象生成一个md5字符串,然后将其附加到文件名,但是当人们去下载他们的文件时,他们将在该文件的末尾附加一个随机哈希字符串。
我认为有一个更好,更优雅的方式来做到这一点。谁能帮忙?
那么,你要么需要一个哈希添加到文件名,或者把它放在一个目录中的独特。 – user2896976