2012-01-12 107 views
3

在Django中上傳文件我想使用Uploadify在this tutorial之後上傳Django中的文件。我已經正確地執行了所有步驟。除此之外,我還創建了一個模型,用於存儲有關正在上傳的文件的信息。使用Uploadify獲取HTTP響應代碼403

我的模板中包含此

<script type="text/javascript" src="{{ STATIC_URL }}uploadify/swfobject.js"></script> 
<script type="text/javascript" src="{{ STATIC_URL }}uploadify/jquery.uploadify.v2.1.4.js"></script> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#file_upload').uploadify({ 
      'uploader' : '{{ STATIC_URL }}uploadify/uploadify.swf', 
      'script' : '{% url upload_file %}', 
      'cancelImg' : '{{ STATIC_URL }}uploadify/cancel.png', 
      'auto'  : true, 
      'multi'  : true, 
      'fileExt' : '*.doc;*.docx;*.pdf', 
      'fileDesc' : 'Upload Docs', 
      'queueID' : 'file_upload_queue', 
      'removeCompleted': false, 
     }); 
    }); 
</script> 

<h2 id="smallHeading"> Upload your Documents </h2> 
<input id="file_upload" type="file" name="Filedata" /> 
<a href="javascript:$('#file_upload').uploadifyUpload();">Upload Files</a> 

我url.py文件中包含該行

url(r'^upload/$', 'userprofile.views.upload_file', name='upload_file'), 

和看法是

@csrf_exempt 
def upload_file(request): 
    if request.method == "POST": 
     upload_file = request.FILES['Filedata'] 
     upload_instance = Uploads.objects.create(creator = request.user, uploaded_on = datetime.datetime.now()) 
    upload_instance.file.save(upload_file.name,upload_file) 
    upload_instance.save() 

    response = HttpResponse() 
    response.write("%s\r\n" % upload.name) 
    return response 

和我models.py包含

def get_file_path(instance, filename): 
    return os.path.join('userprofiles', str(instance.creator.id), filename) 

class Uploads(models.Model): 
    file = models.FileField(upload_to=get_file_path) 
    creator = models.ForeignKey(User) 
    uploaded_on = models.DateTimeField() 

但這裏沒有任何事情發生。我得到的只是上傳按鈕,我選擇了這些文件,但沒有任何反應。任何人都可以幫助我找出發生的事情嗎?看來script沒有被解僱。我知道這一點,因爲以前我在我的視圖中有錯誤,但沒有出現錯誤。

任何幫助深表謝意。

編輯:

我沒有看到在firebug控制檯什麼,以及net面板也沒有表現出任何POST請求,但django debugger顯示了403響應文件上傳的POST請求。我已經使用csrf_exempt那麼爲什麼它應該是forbidden

解決方案:我終於解決了這個問題。關於403錯誤,我從link發現了一些有趣的東西。如果一個視圖有修飾器csrf_exempt,並且該視圖有404錯誤,那麼django會顯示403錯誤。

實際的問題是,最初我的鏈接是錯誤的,所以當我糾正它,我停止了403錯誤,但我開始得到500錯誤。這意味着在視圖中出現了錯誤。由於uploadufy不會在firebug中記錄任何內容,所以我必須通過在我的視圖中逐行進行調試。

似乎由uploadify腳本發送的請求對象不完整,並且在創建對象時行creator = request.user給我錯誤。除了這一行,上面的代碼完全可以工作。

+0

是否在設置中啓用了DEBUG? – vikingosegundo 2012-01-12 14:19:38

+0

yes'DEBUG'已啓用,我嘗試製作一個正常的文件上傳表單,並且它工作得很好 – Sachin 2012-01-12 14:29:28

+0

如果啓用了調試,您應該獲得更多信息,比在此處發佈的信息要多。 – vikingosegundo 2012-01-12 15:10:42

回答

1

我建議進一步調試,看看問題出在客戶端JavaScript還是服務器端Django代碼。

下載適用於Firefox的Firebug插件。加載你的頁面。打開Firebug並轉到「網絡」選項卡。確保所有JavaScript都已加載。 接下來,檢查控制檯以查看是否存在任何JavaScript錯誤。 接下來檢查Django日誌以查看是否有任何HTTP請求正在通過,並且可能存在錯誤。

這應該有助於您獲得更多信息,這將有助於您解決問題。您可以隨時通過上述步驟收集的其他信息更新您的問題。

相關問題