2012-11-29 27 views
1

我正在使用此代碼將音頻文件從iphone應用程序上載到服務器。從應用程序使用目標文件上傳到服務器c

NSFileManager *fileManager = [[NSFileManager alloc] init]; 
    NSDictionary *fileAttributes = [fileManager attributesOfItemAtPath:mediaPath error: NULL]; 

    NSLog(@"%@",fileAttributes); 
    if (fileAttributes != nil) { 

     NSNumber *fileSize; 
     fileSize = [fileAttributes objectForKey:NSFileSize]; 
     NSLog(@"%@",fileSize); 

     // NSData *audioData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:audioData ofType:@""]]; 

     NSString *urlString = [NSString stringWithFormat:@"%@audioupload.php",mydomainurl]; 


     NSLog(@"%@",audioData); 
     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=\".caf\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[NSData dataWithData:audioData]]; 
     [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [request setHTTPBody:body]; 

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

     NSLog(@"%@",returnString); 

這樣做這是文件的.caf轉換爲二進制和服用過多(1-2薄荷糖)時上傳的音頻中的服務器。不僅如此,服務器中的文件大小也越來越大。我已經包含了

ASIFormDataRequest 

但是不知道如何在我的代碼中使用它。任何人都可以建議我如何減少上傳時間。

+0

iPhone和服務器上的文件大小是多少?由於數據的大小,上傳時間可能合理嗎? –

+0

NSFileSize = 526300; 並在服務器上傳文件大小爲1mb。這是3秒的音頻.. :( – Shyantanu

+0

你可以使用像提琴手一樣的東西來檢查你的請求的大小,以確保你發送你認爲你正在發送的內容嗎?關於服務器上的文件大小,是你的服務器端代碼附加到現有文件而不是創建一個新文件? –

回答

1

我有一個應用程序非常迅速地做到這一點,我的代碼非常相似,你的。

唯一的區別是上線:

[body appendData:[@"Content-Disposition: form-data; name=\"userfile\"; filename=\".caf\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 

我有一個文件名,而不僅僅是擴展的.caf:

[body appendData:[@"Content-Disposition: attachment; name=\"file2\"; filename=\"test.caf\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 

而且,以後你的音頻數據追加到身體使用此行:

[body appendData:[NSData dataWithData:audioData]]; 

並且在用此行關閉窗體之前:

[body appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

我有這樣一行:

[body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 

我希望這對你的作品。如果沒有,你應該檢查你的服務器端代碼,因爲你和我有幾乎相同的代碼,並且我的音頻上傳速度非常快。

+0

$ uploaddir ='./'; //上傳到與PHP文件相同的目錄 print_r($ _ FILES ['userfile']); $ file = basename($ _ FILES [ 'userfile的'] [ '名稱']); $ uploadFile = $文件; $ randomNumber =蘭特(0,99999); $了newName = $ uploadDir $ randomNumber $ uploadFile; 如果(is_uploaded_file( $ _FILES ['userfile'] ['tmp_name'])){ \t回顯「臨時文件上傳。 \ r \ n「; } else { \t echo」臨時文件未上傳。 \ r \ n「; }這是我的服務器端代碼朋友 – Shyantanu

+0

好的。您是否添加了文件名和在關閉表單之前追加@」\ r \ n「的行?以下是我的服務器端代碼的工作方式: ** $ BASE_URL \t = 'http://xxx.xxx.xxx.xxx'; $ upload_dir \t = 「上傳」;如果 (isset($ _ FILES [ 「文件」])){$ IMAGE_NAME =基名($ _FILES [「file」] [「name」]); $ image_name = time()。'_'。基本名($ _ FILES [ 「文件」] [ 「名稱」]); $ image_name = str_replace('','_',$ image_name); $ filename = getcwd()。 '/'。 $ upload_dir。 '/'。 $ IMAGE_NAME; } if(move_uploaded_file($ _ FILES [「file」] [「tmp_name」],$ filename)) {//成功! $ file_url = $ base_url。 '/'。 $ upload_dir。 '/'。 $ IMAGE_NAME; } ** – GabCas

相關問題