0

죄송합니다, 초보자 용 질문 : 웹 브라우저에서 내 서버로 파일을 업로드 할 수있는 장고 응용 프로그램에 아주 간단한 기능이 있습니다 (완벽하게 작동합니다!). 이제는 웹 브라우저 대신 iPhone을 사용하고 싶습니다.iPhone에서 Django로 파일 업로드

Django에 올바른 양식을 제공하는 방법을 모르는 상태에서 약간의 문제가 발생했습니다. 즉, 파일 이름과 enctype = "multipart/form-data"가 필요한 것입니다. 여기

장고 내 업로드 기능입니다 :

class UploadFileForm(forms.Form): 
    file = forms.FileField() 

def handle_uploaded_file(f): 
    destination = open('uploads/example.txt', 'wb+') 
    for chunk in f.chunks(): 
     destination.write(chunk) 
    destination.close() 

def upload_file(request): 
    if request.method == 'POST': 
     form = UploadFileForm(request.POST, request.FILES) 
     if form.is_valid(): 
      handle_uploaded_file(request.FILES['file']) 
      print form 
      print request.FILES 
      return HttpResponse('Upload Successful') 
    else: 
     form = UploadFileForm() 
    return render_to_response('upload.html', {'form': form}) 

내 템플릿이 (하고 Upload.html)과 같습니다

이제
<form action="" method="post" enctype="multipart/form-data"> 
    {{ form.file }} 
    {{ form.non_field_errors }} 
    <input type="submit" value="Upload" /> 
</form> 

,이 전 간단한 txt 파일을 보내려고한다고 가정하자 내 아이폰 앱에서 서버로. 장고 이것은

입니다 읽을 수

  1. enctype
  2. 는 형식으로 그것의 있는지 확인 지정한 파일 이름을 제공합니다 정말 방법 모른다 내가 얻은 정도 :

    NSString *fileContents = [self loadTXTFromDisk:@"example.txt"]; 
    
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] 
               initWithURL:[NSURL 
                  URLWithString:@"http://127.0.0.1:8000/uploadfile/"]]; 
    
    
    [request setHTTPMethod:@"POST"]; 
    [request setValue:@"text/xml" forHTTPHeaderField:@"Content-type"]; 
    [request setValue:[NSString stringWithFormat:@"%d", [fileContents length]] 
               forHTTPHeaderField:@"Content-length"]; 
    [request setHTTPBody:[fileContents dataUsingEncoding:NSUTF8StringEncoding]]; 
    
    NSURLConnection *theConnection = [[NSURLConnection alloc] 
                initWithRequest:request 
                delegate:self]; 
    

    그러나 Django는 예상 한 형태가 유효하지 않기 때문에 이것을 제외하고는하지 않습니다. Cf. 위 : HTML 양식에서

답변

2

enctype HTTP 요청의 Content-Type을해야합니다. 현재 콘텐츠 유형을 'text/xml' (으)로 설정 중입니다.

또한 멀티 파트 마임 개체로 본체를 빌드해야합니다. 이 질문에 대한 답변은 다음과 같은 코드가있는 것 같습니다. File Upload to HTTP server in iphone programming

다른 옵션은 클라이언트에 대한 완전한 제어권을 갖고 있으므로 HTTP PUT 요청을하는 것입니다. 실제로 원래 코드로 수행 한 작업에 더 가깝게 보입니다. 메소드를 'PUT'으로 변경하고 다른 끝에 Django 양식을 사용하지 마십시오. request.raw_post_data에 액세스하여 전체 파일 데이터를 가져옵니다.

+0

감사하지만 여전히 작동하지 않습니다. 이제 예외가 발생합니다 : "멀티 파트에서 유효하지 않은 경계 : 없음"경계 란 무엇이며 어떻게 설정해야합니까? 당신의 도움을 주셔서 감사합니다! –

+0

NSString과 같은 것 * boundary = [NSString stringWithString : @ "--------------------------- 경계선 -------- ------------------- "]; NSString * contentType = [NSString stringWithFormat : @ "다중 파트/양식 데이터, 경계 = % @", 경계]; [addValue 요청 : contentType forHTTPHeaderField : @ "Content-Type"]; –

+0

그렇다면 경계선이 무엇인지 생각했습니다. 그것은 무작위인가? –

관련 문제