如何将视频从iOS设备上传到Django服务器
问题描述:
如何将iOS设备上的视频上传到Django服务器,以及如何将视频保存到mp4格式的文件夹中。 我试过一些东西。这是我的iOS代码:如何将视频从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];
这是我的Python代码:
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()
谢谢。
答
解决它。
这里是iOS的代码:
- (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];
}
的Django代码:
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()
问题是在Django的,没有找到该文件。
+0
是甚至格式正确的Python代码? –
感谢您发布您的代码,但请在您的问题中多加一点说明:您有什么问题,您期望的结果是什么,以及[您尝试过什么](http://whathaveyoutried.com)远?通过[问题清单](http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist)将帮助我们更好地回答你的问题。谢谢! –
你好,直到现在我已经让选择器控制器返回我的设备中的视频的路径,我试图将其转换为数据并将其发送到我的python/django服务器,在这里我希望它能够接收它并保存到我的桌面/文件夹从我的设备视频文件。问题是,它在django服务器,但我解决它 - > form = UploadFileForm(request.POST,request.FILES)。现在form.is_valid()是无效的,因为它没有罚款任何数据。 –
我改变了我的iOS代码 ASIFormDataRequest * request = [ASIFormDataRequest requestWithURL:url]; [请求setPostValue:@“test”forKey:@“title”]; [request setFile:urlString forKey:@“file”]; [请求setRequestMethod:@“POST”]; [request setDelegate:self]; [request startSynchronous]; 现在它给我: - >检测到不正确的NSStringEncoding值0x0000。假设NSASCIIStringEncoding。将在不久的将来停止这种兼容性映射行为。 –