django를 사용하고 있으며 특정 위치에 저장되어있는 zip 파일을 업로드하려는 응용 프로그램을 만들었습니다 (이 시점에서 내 django 서버는 localhost 임) Idjango에서 양식 제출 후 리디렉션하는 페이지가 중지됩니다.
class UploadFileForm(forms.Form):
docfile = forms.FileField()
이것은이다 : 이것은 내 forms.py이
<form id="saveZipFile" enctype="multipart/form-data" action="" method="post">
{% csrf_token %}
<input type="file" name="docfile" id="docfile">
<input type="submit" id="upload-button" value="Upload">
</form>
입니다 :
이 내 HTML 템플릿입니다 : 잘 작동 다음 코드가 내 views.py :
def handle_uploaded_file(f):
with open('uploaded_zip.zip', 'wb+') as destination:
for chunk in f.chunks():
destination.write(chunk)
def upload_file(request):
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
handle_uploaded_file(request.FILES['docfile'])
return HttpResponse()
else:
form = UploadFileForm()
return HttpResponse()
urls.py :
urlpatterns = [
url(r'^upload_file/$', views.upload_file, name='upload_file'),
]
그러나 결국
이 URL이/upload_file
에 변화 - 나는 이해 정확한지 - 그 페이지가 비어 (I 이후 빈을 반환 함
HttpResponse
)
단일 페이지 응용 프로그램을 작성하려고하는데이 리다이렉션은 내 웹 페이지의 전체 상태를 창 밖으로 던지고 있습니다.
장고 (Django) 양식 대신 AJAX 호출을 만들 수있는 방법이 있습니까?
감사합니다.
편집
나는 업로드 된 파일을 가져 와서 장고보기로 전송 아약스 호출을 추가했다.
AJAX 호출 :
var selectedFile = $('#docfile').files[0];
var fd = new FormData();
fd.append("file", selectedFile);
$.ajax({method: 'POST',
url: 'upload_file',
data: fd,
headers: {'Content-Type': undefined,
'X-CSRFToken': getCookie('csrftoken')
},
cache: false,
processData: false})
.done(function(data) {
alert(data)
});
하지만 request.POST
인쇄보기에,이 혼란을 얻을 (그리고 많은, 많은 선) :
<QueryDict: {u'\x00\x00userapp/.git/objects/0e/34e20fc7131238973f102fe6d2d7fe102d12f4UT\x05\x00\x03\ufffd': [u'\xc0Yux\x0b\x00\x01\x04\xe8\x03\x00\x00\x04\xe8\x03\x00\x00PK\x01\x02\x1e\x03\n\x00\x00\x00\x00\x001\x852K\x00\x00\x00\x00\x00\x00\
음, 그렇습니다. 하지만 zip 파일 내용도 저장해야합니다. zip 파일 내용을 보내면 QueryDict에 바이너리 데이터가 가득 찼습니다. 그 중 무엇을해야할지 모르겠습니다. – SaniKul
나는 약간을 연구했고 django-forms를 사용하여 파일을 업로드 할 때 - 업로드 된 파일은 InMemoryUploadedFile 객체가됩니다. 따라서 내장 된 django 함수를 호출하여이 파일을 저장하는 것은 매우 간단합니다. 질문은 요청에 거대한 데이터가있을 때 발생합니다 .POST QueryDict 및이를 .zip 파일로 변환하는 간단한 방법이 아닌 것 같습니다. – SaniKul