2013-11-20 3 views
6
-(IBAction)uploadToServer :(id)sender 
{ 
    NSString *str1=[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"intro.mp4"]; 
    NSLog(@"str1=%@",str1); 

    NSString *escapedUrlString = [str1 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
    NSLog(@"escapedUrlString=%@",escapedUrlString); 

    NSURL *videoURL = [NSURL URLWithString:escapedUrlString]; 
    NSLog(@"videoURL=%@",videoURL); 

    NSData *newdata = [NSData dataWithContentsOfFile:escapedUrlString]; 
    webdata=[NSData dataWithData:newdata]; 
    NSLog(@"webData = %@",webdata); 
    [self post:webdata]; 
    } 

- (void)post:(NSData *)fileData 
{ 

    NSData *videoData = fileData; 
    NSString *urlString = @"http://rompio.com/web_service/web.php?method=upload_video&user_id=4"; 

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
    [request setURL:[NSURL URLWithString:urlString]]; 
    [request setHTTPMethod:@"POST"]; 

    NSString *boundary = @"---------------------------14737809831466499882746641449"; 
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]; 
    [request addValue:contentType forHTTPHeaderField:@"Content-Type"]; 

    NSMutableData *body = [NSMutableData data]; 
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[@"Content-Disposition: form-data; name=\"userfile\"; filename=\".mp4\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[NSData dataWithData:videoData]]; 
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [request setHTTPBody:body]; 

    NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
    NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; 

    NSLog(@"returnString=== %@", returnString); 
} 
+0

Написать вам код правильно так будет легко понятно другим. В любом случае, какова проблема, которую вы получаете при загрузке? –

+0

http://stackoverflow.com/questions/20047607/uploading-file-only-transmits-few-byes-fo-data-ios/20069694#20069694 – Dilip

+0

В этом коде.WebData наступает Null.Also Video не удается получить отправленный на сервер. – rahul

ответ

6

Это легко сделать с библиотекой AFNetworking, и вы также можете использовать ее для отслеживания хода загрузки видео. Вы можете загрузить библиотеку AFNetworking с here.

И для настройки AFnetworking обратитесь к этому Link.

И этот код будет использоваться для отправки видео на сервере

NSString *videoURL = [[NSBundle mainBundle] pathForResource:@"myVideo" ofType:@"mov"]; 
NSData *videoData = [NSData dataWithContentsOfURL:[NSURL fileURLWithPath: videoURL]]; 

AFHTTPClient *httpClient = [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"http://www.example.com"]]; 

NSMutableURLRequest *request = [httpClient multipartFormRequestWithMethod:@"POST" path:@"/videoupload.php" parameters:nil constructingBodyWithBlock:^(id <AFMultipartFormData>formData) 
{ 
    [formData appendPartWithFileData:videoData name:@"file" fileName:@"myVideo.mov" mimeType:@"video/quicktime"]; 
}]; 



AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest: request]; 

[operation setUploadProgressBlock:^(NSInteger bytesWritten,long long totalBytesWritten,long long totalBytesExpectedToWrite) 
{ 

    NSLog(@"Sent %lld of %lld bytes", totalBytesWritten, totalBytesExpectedToWrite); 

}]; 

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {NSLog(@"Video Uploaded Successfully");} 
            failure:^(AFHTTPRequestOperation *operation, NSError *error) {NSLog(@"Error : %@", operation.responseString);}]; 


[operation start]; 
+0

Я загружаю файл для сети AF. Но нет такого имени файла, состоящего из AFHTTPClient. – rahul

+0

. В новом обновлении AFNetworking есть некоторые изменения. Http://stackoverflow.com/questions/19502673/afnetworking-afhttpclient- class – Dilip

+0

[operation setUploadProgressBlock:^(NSInteger bytesВписано, long long totalBytesWritten, long long totalBytesExpectedToWrite) Теперь я получаю ошибку только в этой строке. Несовместимые типы указателей блоков, отправляющие 'void (^) (NSInteger, long long, long long)' в параметр типа 'void (^) (NSUInteger, long long, long long)' – rahul

Смежные вопросы