2012-04-12 92 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