Django InMemoryUploadFile内容和名称操作

时间:2013-12-09 06:13:27

标签: python django file-upload

嗨,我还是Django和Python的新手,我对API有了解,所以我完全有可能错过一些明显的东西。

我通过FileField(Django)的forms.Form收到一个文件。因此设法获得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 个答案:

答案 0 :(得分: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个实例。