2013-04-30 45 views
0

就像標題所說的那樣,我想知道如何在視圖內部上傳文件時從Django存儲的臨時文件中訪問數據。在django視圖中上傳臨時文件

我想讀取數據上傳值,所以我可以做一個進度條。我的方法是執行一個jQuery getJSON要求:

function update_progress_info() { 
     $progress.show(); 
     $.getJSON(progress_url, function(data, status){ 
      if (data) { 
       var progress = parseInt(data.uploaded)/parseInt(data.length); 
       var width = $progress.find('.progress-container').width() 
       var progress_width = width * progress; 
       $progress.find('.progress-bar').width(progress_width); 
       $progress.find('.progress-info').text('uploading ' + parseInt(progress*100) + '%'); 
      } 
      window.setTimeout(update_progress_info, freq); 
     }); 
    }; 

其中progress_url是我認爲處理上傳的文件數據:具有此名稱的settings.py定義

與UploadHandler
# views.py (I don't know what to do here): 
def upload_progress(request): 
    for line in UploadedFile.temporary_file_path 
     response = (line) 
    return response 
+0

看一看StringIO的也是這等崗位 http://stackoverflow.com/questions/10949601/django-get-imagefield-path-before-saving-image/10950983#10950983 我問過類似的 – 2013-04-30 21:29:02

+0

之前的問題我不確定你在做什麼......如果它是帶進度條的文件上傳器,你可以看看[本教程](http://www.laurentluce.com/posts/)上傳到django的與 - 使用的Ajax和 - jquery的進度條-/)。 – Alexandre 2013-04-30 21:32:12

回答

3

Django的手柄上載的文件FILE_UPLOAD_HANDLERS默認爲這個元組:

FILE_UPLOAD_HANDLERS = 
("django.core.files.uploadhandler.MemoryFileUploadHandler", 
"django.core.files.uploadhandler.TemporaryFileUploadHandler",) 

文件上傳的行爲是如果文件小於2.5毫克,那麼它將被保存在內存中,因此它們不會被作爲臨時文件寫入磁盤。

如果文件權重更大,它將被寫入FILE_UPLOAD_TEMP_DIR中的塊settings.py中。這是您必須查詢的文件,以瞭解已上傳了多少個字節。

您可以通過views中的request變量訪問上傳/上傳文件,如下所示:file = requests.FILES['file']。在那裏,file變量將具有類型UploadedFile,其包含方法temporary_file_path,其中上載的磁盤中的文件的地址。 (注意:只有大於2.5毫克的文件纔會有這種方法),所以你可能會得到上傳文件的大小。

另一種方法是創建自己的UploadHandler,如ProgressBarUploadHandler並將其添加到文件上傳處理程序。這是docs推薦它的方式。這裏有一些snippetstutorials這樣做。

如果您需要更多信息,doc是真正有據可查的。

我希望對您有所幫助。祝你好運。