2013-10-27 4 views
0

iOS 장치에서 Django 서버로 비디오를 업로드 한 후이를 mp4 형식의 폴더에 저장하는 방법. 나는 뭔가를 시도했습니다. 이것은 내 아이폰 OS 코드입니다 :iOS 장치에서 Django 서버로 비디오를 업로드하는 방법

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:serverAddress]]; 

NSData *postData = [[NSData alloc] initWithContentsOfFile:[self.movieURL absoluteString]]; 

[request setPostValue:@"test" forKey:@"name"]; 
[request addData:postData withFileName:@"testt.mov" andContentType:@"video/quicktime" forKey:@"file"]; 

[request setDelegate:self]; 

[request setCompletionBlock:^ 
{ 
    NSLog(@"ResponseString:%@",[request responseString]); 
}]; 
[request setFailedBlock:^ 
{ 
    NSLog(@"Error"); 
}]; 

[request startSynchronous]; 

[picker dismissViewControllerAnimated:YES completion:nil]; 

그리고 이것은 내 파이썬 코드 :

class UploadFileForm(forms.Form): 
title = forms.CharField(max_length=50) 
file = forms.FileField() 


def upload_file(request): 
    if request.method != "POST": 
     return HttpResponseNotAllowed(permitted_methods=['POST']) 

    form = UploadFileForm(request.POST.get('name'), request.FILES) 

    if form.is_valid(): 
     handle_uploaded_file(request.FILES['file']) 
     return HttpResponse(json.dumps({"Status": 0}, sort_keys=True)) 
    else: 
     return HttpResponse(json.dumps({"Status": 1}, sort_keys=True)) 


def handle_uploaded_file(file, path=''): 
    # filename = file._get_name() 
    destination_file = open('%s/%s' % (settings.MEDIA_ROOT, str(path) + 'test.mp4'), 'wb+') 
    for chunk in file.chunks(): 
     destination_file.write(chunk) 
    destination_file.close() 

감사합니다.

+0

코드를 게시 해 주셔서 감사합니다.하지만 문제에 대한 설명과 예상되는 결과는 무엇이며 어떤 시도를 했나요? (http://whathaveyoutried.com) 멀리? [질문 체크리스트] (http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist)를 통해 귀하의 질문에 더 잘 답변 할 수 있습니다. 감사! –

+0

안녕하세요, 지금까지 내 장치에서 비디오의 경로를 반환하는 선택기 컨트롤러를 만들었고 데이터로 변환하고 파이썬/장고 서버로 보내려고합니다. 여기에 그것을 받아보고 싶습니다. 내 장치에서 비디오 파일을 내 바탕 화면/폴더에 저장할 수 있습니다. 문제는 그것이 django 서버에서 crases하지만 나는 그것을 해결했습니다 -> 양식 = UploadFileForm (request.POST, request.FILES). 이제는 form.is_valid()가 유효하지 않습니다. 왜냐하면 어떤 데이터도 괜찮지 않기 때문입니다. –

+0

iOS 코드를 으로 변경했습니다. ASIFormDataRequest * request = [ASIFormDataRequest requestWithURL : url]; [요청 setPostValue : @ "test"forKey : @ "title"]; [요청 setFile : urlString forKey : @ "file"]; [요청 setRequestMethod : @ "POST"]; [request setDelegate : self]; [요청 startSynchronous]; 이제 알려줍니다 : -> 잘못된 NSStringEncoding 값 0x0000이 감지되었습니다. NSASCIIStringEncoding을 가정합니다. 가까운 장래에이 호환성 매핑 동작을 중단합니다. –

답변

0

해결하십시오. 파일을 찾을 수 없습니다,

class UploadFileForm(forms.Form): 
    title = forms.CharField(max_length=50) 
    file = forms.FileField() 


def upload_file(request): 
    if request.method != "POST": 
     return HttpResponseNotAllowed(permitted_methods=['POST']) 

form = UploadFileForm(request.POST, request.FILES) 

if form.is_valid(): 
    handle_uploaded_file(request.FILES['file'], request.POST.get('title')) 
    return HttpResponse(json.dumps({"Status": 0}, sort_keys=True)) 
else: 
    return HttpResponse(json.dumps({"Status": 1}, sort_keys=True)) 


def handle_uploaded_file(file, string, path=''): 
    destination_file = open('%s/%s' % (settings.MEDIA_ROOT, str(path) + string), 'wb+') 
    for chunk in file.chunks(): 
     destination_file.write(chunk) 
    destination_file.close() 

문제가 장고에 있었다 :

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
NSURL *urlvideo = [info objectForKey:UIImagePickerControllerMediaURL]; 

NSString *urlString=[urlvideo path]; 

NSString *str = serverAddress; 
NSURL *url = [NSURL URLWithString:[str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 

[request setPostValue:[NSString stringWithFormat:@"%@.mp4",videoName.text] forKey:@"title"]; 
[request setFile:urlString forKey:@"file"]; 
[request setRequestMethod:@"POST"]; 
[request setDelegate:self]; 
[request startSynchronous]; 

NSLog(@"responseStatusCode %i",[request responseStatusCode]); 
NSLog(@"responseStatusCode %@",[request responseString]); 

[picker dismissViewControllerAnimated:YES completion:NULL]; 
} 

장고 코드 :

다음은 아이폰 OS 코드입니다.

+0

파이썬 코드도 올바르게 포맷 되었습니까? –

관련 문제