2009-03-04 80 views
5

沒有人有Django的+ SWFUpload任何簡單的代碼示例?我已經在我的PHP應用程序中完美工作,但Django讓我頭疼。Django + SWFUpload的代碼示例?

+2

-1:無碼。 -1:無錯誤追蹤或其他消息。 – 2009-03-05 00:30:52

回答

17

不幸的是我不能給你任何非常詳細的代碼示例,但我有相當多的經驗與SWFUpload的+ Django的工作(相片分享網站,我的工作)。無論如何,這裏有幾個要點,希望能幫助你在你追求幸福DjSWF :)

  1. 您將要使用的cookie插件(當然,如果你正在使用某種形式的基於會話的認證[如django.contrib.auth,並關心誰上傳了什麼)。

    的餅乾插件從餅乾作爲POST發送數據,所以你必須找得到這回request.COOKIESprocess_request中間件在request.POST在特定網址上尋找一個settings.SESSION_COOKIE_NAME並轉儲到request.COOKIES作品起到了很好的一些方法這個:)

  2. 另外,請記住,你必須東西在響應身體的SWFUpload將其識別爲一個成功上傳的嘗試。我相信這已經在SWFUpload的最新測試版改變了,但無論如何,它的建議只是堅持東西在那裏,像「OK」。對於故障,請使用類似HttpResponseBadRequest之類的東西。

  3. 最後,如果您無法找到他們,上傳的文件是在request.FILES :)

如果您有什麼困惑我還沒有涉及,隨意張貼的東西更詳細我很樂意提供幫助。

+4

這是一個非常糟糕的問題的絕佳答案。第(1)點的第二段特別有助於我。謝謝。 – bouvard 2009-05-12 03:46:16

0

以下是我修復此問題(即我上傳在Firefox中未能以302重定向)具體的Django的實現。

在我最初認爲它與上傳生成的頁面,我看着餅乾和發現的SessionID

ipdb> self.request.COOKIES 
{'csrftoken': '43535f552b7c94563ada784f4d469acf', 'sessionid': 'rii380947wteuevuus0i5nbvpc6qq7i1'} 

當我看到什麼被張貼在SWFUploadMiddleware(使用Firefox時)我發現sessionid沒有被設置。

在我生成一個包含上傳處理程序的頁面INTIAL看法,我加入了會話ID上下文。

context['sessionid'] = self.request.session.session_key 

在我swfuploader設置,我添加的SessionID到PARAMS後的選項,如下所示:

post_params: {... "sessionid": "{{ sessionid }}" ...}, 

現在,當我在SWFUploadMiddleware望去,我能看到的SessionID被張貼,和我的上傳開始工作,如果Firefox

ipdb> request.POST 
<QueryDict: {... u'session_id': [u'rii380947wteuevuus0i5nbvpc6qq7i1'],...}> 

爲了完整起見,我SWFUploadMiddleware看起來像這樣...

from django.conf import settings 
from django.core.urlresolvers import reverse 

class SWFUploadMiddleware(object): 
    def process_request(self, request): 
     if (request.method == 'POST') and (request.path == reverse('upload_handler')) and request.POST.has_key(settings.SESSION_COOKIE_NAME): 
      request.COOKIES[settings.SESSION_COOKIE_NAME] = request.POST[settings.SESSION_COOKIE_NAME] 
    # http://stackoverflow.com/questions/6634666/403-forbidden-error-on-swfupload-and-django 
    # Fix for problem uploading images (403 error) in Firefox 20 and others 
    if request.POST.has_key('csrftoken'): 
      request.COOKIES['csrftoken'] = request.POST['csrftoken']