2010-01-03 83 views
7

我檢查了其他幾個線程,但我仍然遇到問題。我有一個包含FileField的模型,並且我正在爲各種目的生成半隨機實例。但是,我在上傳文件時遇到問題。以編程方式在Django中上傳文件

當我創建一個新文件時,它似乎可以工作(將新實例保存到數據庫),在相應的目錄中創建了一個文件,但該文件的內容已丟失或損壞。

下面是相關代碼:

class UploadedFile(models.Model): 
    document = models.FileField(upload_to=PATH) 


from django.core.files import File 

doc = UploadedFile() 
with open(filepath, 'wb+') as doc_file: 
    doc.documen.save(filename, File(doc_file), save=True) 
doc.save() 

謝謝!

回答

17

它可以像打開文件一樣簡單。由於您以'wb +'(write,binary,append)打開文件,因此句柄位於文件的末尾。請嘗試:

class UploadedFile(models.Model): 
    document = models.FileField(upload_to=PATH) 


from django.core.files import File 

doc = UploadedFile() 
with open(filepath, 'rb') as doc_file: 
    doc.document.save(filename, File(doc_file), save=True) 
doc.save() 

現在它在文件開始處打開。

+0

謝謝!接得好! – SapphireSun 2010-01-03 05:36:17

+2

一個幸運的猜測;)...我從來沒有真正需要以編程方式上傳文件,但這是我能看到的唯一看起來很腥的東西。 – JudoWill 2010-01-03 17:12:29

+1

爲什麼要保存整個模型?是不是多餘的(早期由'doc.document.save()'用'save = True'調用) – Jerzyk 2012-08-31 20:40:41

相關問題