갤러리에서 동영상을 업로드하여 서버 멀티 파트로 보내야합니다.
갤러리에서 영화를 선택하면 다음 정보가 있습니다.
self.videoDictionary = {
UIImagePickerControllerMediaType = "public.movie";
UIImagePickerControllerMediaURL = "file:///Users/alin/Library/Application%20Support/iPhone%20Simulator/7.0.3/Applications/714D0B71-80EA-4B6C-9ACF-A287C8F40121/tmp/trim.FF287468-B25E-4EEA-8EAB-A485842476FA.MOV";
UIImagePickerControllerReferenceURL = "assets-library://asset/asset.MOV?id=393E740F-B7F4-46DA-BB09-69AB92C34660&ext=MOV";
}
내 WS 서명은 다음과 같습니다.
매개 변수 :
비디오
동영상을 업로드하려고 할 때 문제가 있습니다.
-(void)addVideoRequestToWS
{
BusinessLogic *bl = [BusinessLogic sharedManager];
ApiClientBlitzApp *client = [ApiClientBlitzApp sharedClient];
NSString *videoURL = [self.videoDictionary objectForKey:@"UIImagePickerControllerReferenceURL"];
NSData *videoData = [NSData dataWithContentsOfURL:[NSURL fileURLWithPath: videoURL]]; // I suppose my problem are from two lines of code
NSMutableURLRequest *request = [client multipartFormRequestWithMethod:@"POST" path:getAddVideo parameters:nil constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) {
[formData appendPartWithFormData:[[NSString stringWithFormat:@"%@",bl.currentUser.hash] dataUsingEncoding:NSUTF8StringEncoding] name:@"hash"];
[formData appendPartWithFormData:[[NSString stringWithFormat:@"%@",self.textFieldTitle.text] dataUsingEncoding:NSUTF8StringEncoding] name:@"title"];
[formData appendPartWithFormData:[[NSString stringWithFormat:@"%@",self.textFieldDescription.text]] dataUsingEncoding:NSUTF8StringEncoding] name:@"description"];
[formData appendPartWithFileData:videoData name:@"video_file" fileName:@"testvideo.mov" mimeType:@"video/quicktime"];
}];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
NSLog(@"Sent %lld of %lld bytes", totalBytesWritten, totalBytesExpectedToWrite);
}];
[client enqueueHTTPRequestOperation:operation];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSData *JSONData = [operation.responseString dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *jsonObject = [NSJSONSerialization JSONObjectWithData:JSONData options:NSJSONReadingMutableContainers error:nil];
NSLog(@"jsonObject of the list = %@", jsonObject);
}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"error: %@", operation.responseString);
NSLog(@"%@",error);
}];
[operation start];
}
몇 가지 문제가 있으며 어떤 문제가 발생했는지 언급하지 않았습니다.
첫째,이 줄 :
[client enqueueHTTPRequestOperation:operation];
완료 블록을 설정하기 전에는 절대 수행해서는 안되는 작업을 즉시 시작할 수 있습니다.
둘째,이 줄 :
[operation start];
즉시 작업을 시작합니다 (이미 추가 한 NSOperationQueue가 아직 시작되지 않은 경우). 둘 다가 아닌 둘 중 하나만 수행해야하며 작업 을 구성한 후에 수행해야하는 작업을 수행해야합니다 .
마지막으로 멀티 파트 업로드의 경우 :
NSMutableURLRequest *request = [client multipartFormRequestWithMethod:@"POST" path:getAddVideo parameters:nil constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) {
[formData appendPartWithFormData:[[NSString stringWithFormat:@"%@",bl.currentUser.hash] dataUsingEncoding:NSUTF8StringEncoding] name:@"hash"];
[formData appendPartWithFormData:[[NSString stringWithFormat:@"%@",self.textFieldTitle.text] dataUsingEncoding:NSUTF8StringEncoding] name:@"title"];
[formData appendPartWithFormData:[[NSString stringWithFormat:@"%@",self.textFieldDescription.text]] dataUsingEncoding:NSUTF8StringEncoding] name:@"description"];
[formData appendPartWithFileData:videoData name:@"video_file" fileName:@"testvideo.mov" mimeType:@"video/quicktime"];
}];
서버가 미친 짓을하지 않는 한 이것은 잘못된 것일 수 있습니다. 우선, .NET과 같은 문자열을 전달하기 위해 문자열 포맷터를 사용할 필요가 없습니다 self.textFieldTitle.text
. 둘째, 무엇 hash
입니까? 일반적으로 해시는 NSUInteger
이 방식으로 문자열 포맷터에서 작동하지 않습니다. 무슨 일이 일어나고 있는지, 어떤 일이 일어나고 싶은지에 대해 충분한 세부 정보를 제공하지 않았기 때문에 확실하게 말할 수 없습니다.
앱이 실제로 전송하는 트래픽을 검사하려면 Charles 와 같은 HTTP 프록시를 설정해야합니다 . 또는 최소한 AFHTTPRequestOperationLogger 를 설치해야합니다. 그러면 대부분의 항목이 Xcode 콘솔에 기록됩니다. 당신이 보내는 것을 서버가 기대하는 것과 비교하십시오. 성공 및 실패 블록 내에 중단 점을 설정하고 오류가 표시되면 검사합니다. 그리고 다시 문제가 발생하면 Stack Overflow에 콘솔 출력을 게시하여 더 나은 도움을 드릴 수 있습니다. 예상 한 내용 과 실제로 발생 하는 것과 어떻게 다른지 에 대한 세부 정보를 포함하세요 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다