2010-02-26 4 views
1

나는 간단한 양식을 (내가 제거 버전을 붙여 합니다만, 모든 중요한 부분이 포함되어 있습니다)를 사용하여 파일 업로드를 구현하기 위해 노력하고있어

초기 이야기 :장고 1.1.1 다중/폼 데이터에 질식

이제
<form method="POST" action="" enctype="multipart/form-data"> 
     <input type="file" name="up_file" size="50"> 
     <input type="hidden" name="cpk" value="{{c.pk}}"> 
     <input type="submit" name="btn_submit"> 
    </form> 

, WSGI에서 실행되는 서버 측 스크립트는 "CPK"필드에 이상한 값을 수신하고 request.FILESrequest.FILESrequest.POST 사전 빈, 그래서 개발로 전환하기로 결정 서버 f 또는 디버깅.

놀랍게도 ipdb 디버거 태그로부터 모두 request.POST 및 request.FILES 및 가압 입력 ... 반면에, I가 에 enctype = "다중/폼 데이터"를 제거 할 때 입력 후 달려 요청을 모두 확인할 수 있습니다. 호스트요청. 파일, 물론 요청. 파일은 비어 있습니다.

내가 오페라의 모든 조합을 시도

업데이트

를 (또한 ... 버전 = "다중/폼 데이터" 에 enctype의 제거에 의해 치유 될 것 같다 WSGI) 10 // 파이어 폭스 3.5 , enctype = "multipart/form-data"// multipart/form-data 및 dev server // mod_wsgi가 없습니다. 결과는 입니다. en30ype = "multipart/form-data"은 쇼을 깨뜨린 것입니다. 그래서 이제 장고 버그 추적기가 알려진 문제인지 확인하겠습니다.

한편은, 아마도 여기 누군가가 올바른 방향으로

답변

4

당신은 우리가 큰 성공을 장고 1.1.1에 enctype="multipart/form-data"와 형태의 업로드를 사용할 때보기 및 형태 코드를 제공해야 할 수도 있습니다 나를 가리킬 수 있습니다.

예를 들어, 다음 더미 응용 프로그램은 dev 서버에서 완벽하게 작동합니다.

<html> 
<body> 
    <form enctype="multipart/form-data" method="post"> 
     {{ form.f }} 
     {{ form.cpk }} 
     <input type="submit" /> 
    </form> 
</body> 
</html> 

하고 Upload.html views.py

from django import forms 
from django.shortcuts import render_to_response 

class UploadForm(forms.Form): 
    cpk = forms.CharField(max_length=256) 
    f = forms.FileField() 

def my_upload_view(request): 
    if request.method == 'POST': 
     form = UploadForm(request.POST, request.FILES) 
     if form.is_valid(): 
      print "Got cpk",form.cleaned_data['cpk'] 
      print "Got file",request.FILES['f'].read() 
    else: 
     form = UploadForm() 
    return render_to_response('upload.html', {'form':form}) 

내가 파일 입력을 렌더링하기 위해 장고 양식 인스턴스를 사용하고 있지만, 그것은 매우 일반적인 <input type="file" name="f" id="id_f" />를 렌더링합니다.

이 샘플을 사용하여 내 dev 서버에서 터미널로 인쇄 한 파일 내용 (간단한 텍스트 파일을 사용하여 테스트했습니다)을 얻습니다. 내가 추천 할 수있는 몇 개는 및 테스트는 다음과 같습니다

  • 는 업로드하는 파일 미만 settings.FILE_UPLOAD_MAX_MEMORY_SIZE 있는지 확인 (기본값은 2입니다.5메가바이트) 당신이 있는지 확인하려면 업로드 프로세스 (settings.FILE_UPLOAD_HANDLERS)
  • 작은 텍스트 파일과 같은 매우 간단한 파일 (업로드 시도를) 파괴 될 수있는 사용자 정의 파일 업로드 핸들러를 정의하지 않은
  • 더블 체크 문제는 여전히 기본으로 유지됩니다.
  • 원시 HTTP 요청/응답 트래픽을 검사하는 도구를 사용합니다 (방화 광구가이 작업을 수행하며 여기에서 도움이되는 프록시로 작동하는 일부 독립 실행 형 응용 프로그램도 있음). .. 때로는 원시 트래픽을 볼 수있을 때 솔루션이 튀어 나옵니다.

아직 찾을 수없는 경우, django file upload docs에는 많은 예제가 있습니다.

+0

방금 ​​더미 응용 프로그램을 사용해 보았습니다. 내 프로젝트에 붙여 넣으면 붙어 버렸지 만 독립 실행 형 프로젝트로 실행하면 완벽하게 작동합니다! 그 모든 예외를 설명합니다, 나는 심지어 내가 장고 요청 처리를 어느 시점에서 깨뜨릴 수도 의심하지 못했습니다. 고맙습니다! –