2013-12-09 54 views
0

嗨我还是新来的Django和Python,我有问题了解的API,所以这是完全可能我失去了一些明显的东西。Django InMemoryUploadFile内容和名称操作

我收到一个文件“through”FileFieldforms.Form(Django)。因此设法得到InMemoryUploadedFile的一个实例。此表单未链接到模型。 在将文件放入模型并保存之前(我正在使用S3BotoStorage)之前,我想更改文件名并对文件内容进行加密(现在真的没有什么特别的,我仍在测试这个)。

我不明白的是如何访问文件的文件名和数据内容并覆盖它?或创建我的InMemoryUploadedFile的修改实例。

我已经考虑过使用类似这样的东西,但显然它不起作用。

def encrypt(inMemFile, key): 
    assert isinstance(inMemFile, InMemoryUploadedFile) 
    secret = m2secret.Secret() 
    secret.encrypt(inMemFile.read(), key) 
    inMemFile.file = File(secret.serialize(), uuid.uuid4().get_hex()) 
    return inMemFile 

回答

1

您可以将File实例指定给模型字段。像这样的东西应该工作:

obj = form.save(commit=False) 
# [...] your encryption stuff [...] 
obj.some_file_field = ContentFile(secret.serialize(), uuid.uuid4().get_hex()) 
obj.save() 
form.save_m2m() 

又见Django的文档中的部分Handling uploaded files with a model的第二个例子。 请注意,较大的文件不在内存中处理;他们是TemporaryUploadedFile实例。

+1

为我工作。干杯 –