2012-04-12 73 views
1

我目前需要將大型文件從iDevice上傳到服務器API。爲此,我試圖使用ASIHTTPRequest庫,因爲它自動支持在排隊塊中上傳大文件(在此之前,我只是簡單地爲整個文件創建一個帶有字節的NSData實例並將其附加到POST消息中,但這會導致由於RAM使用量過大,應用程序在更大的文件上崩潰)。ASIHTTPRequest - 從相機膠捲上傳文件

的問題是,當你需要上傳的文件和文件添加到HTTP POST消息,這是你需要使用的語法:

[theUploadRequest setFile:@"" forKey:@"videoupload"]; 

setFile需要一個字符串格式的文件路徑。我目前遇到的問題是,它似乎不允許您從文件夾中取出不在應用程序沙箱中的文件路徑?由於我需要上傳一個不在我的應用程序中,但在標準攝像頭以外的文件。

我試圖使這個簡單的測試,看看我能創造一個NSData對象,並使用從cameraroll文件中的數據填充它,提供了一個路徑,它是這樣的:

NSData *testData = [NSData dataWithContentsOfURL:theContent.defaultRepresentation.url]; 
NSLog(@"THE SIZE OF THE TEST DATA: %i", testData.length); 

注意「 「內容」是ALAsset的一個實例,並且是從相機中檢索的文件。這個結果只是0的長度,我想這意味着你不能簡單地做到這一點。

有沒有辦法解決這個問題?或者我必須以某種方式將視頻文件導入到應用程序的沙箱中?

回答

1

看一看here可能你會發現一些有用的東西。

希望這會有所幫助。

編輯: 對於簡單的東西你可以使用的代碼,在此answer

發佈言下之意是,你需要在上傳之前某處複製文件的位,尤其是如果它是一個大的。

+0

aha是從第一個鏈接的功能完美工作:)感謝您的幫助! – CodingBeagle 2012-04-12 10:20:28

2

所以,如果我理解正確,你想直接從相機膠捲上傳東西?基於該docs我說你需要的代碼的重要的部分是:

NSString *filePath = [[info objectForKey: 
       UIImagePickerControllerMediaURL] path]; 

的信息字典傳遞到您的媒體選擇的委託:

- (void) imagePickerController: (UIImagePickerController *) picker 
     didFinishPickingMediaWithInfo: (NSDictionary *) info; 

然後,您應該能夠使用filePath在您致電setFile

+0

是的正確:)如果可能,我想直接從相機膠捲上傳它。不幸的是,我想我會遇到一些問題,因爲我很遺憾不使用媒體選擇器:(我有一個自定義媒體選擇器,它使用[AssetLibrary enumerateGroupsWithTypes]迭代並返回來自相機膠捲的視頻內容, ALAsset對象,所以我不確定是否有任何方法可以獲取信息字典。 – CodingBeagle 2012-04-12 09:09:39

+2

那麼在這種情況下;)我想知道這是否回答你的問題? http://stackoverflow.com/questions/4545982/getting-video-from-alasset – brindy 2012-04-12 09:23:08

+2

所以我認爲結論是將它複製到應用程序沙箱中的tmpFile並從那裏上傳。不理想。:( – brindy 2012-04-12 09:24:26

相關問題