2013-12-09 81 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

爲我工作。乾杯 –