ASIHTTPRequest - 从相机胶卷上传文件

时间:2012-04-12 08:27:37

标签: iphone objective-c ios ipad asihttprequest

我目前需要将大型文件从iDevice上传到服务器API。为此,我试图使用ASIHTTPRequest库,因为它自动支持在排队的块中上传大文件(在此之前我只是创建一个NSData实例,其中包含整个文件的字节,并将其附加到POST消息,但这会导致由于RAM使用量过大导致应用程序崩溃的大文件。

问题在于,当您需要上传文件并将文件添加到HTTP Post消息时,这是您需要使用的语法:

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

setFile需要字符串格式的文件路径。我目前遇到的问题是,您似乎不允许从一个不在您的应用程序沙箱中的文件中获取文件路径?因为我需要上传一个不属于我的应用程序的文件,但是在标准的cameraroll中不能上传它。

我尝试进行这个快速测试,看看我是否可以创建一个NSData对象,并用cameraroll中的文件填充数据,提供如下路径:

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

请注意,“theContent”是ALAsset的一个实例,是从cameraroll中检索的文件。结果只是长度为0,我想这意味着你不能简单地做到这一点。

这有什么办法吗?或者我是否必须以某种方式将视频文件导入应用程序的沙箱?

2 个答案:

答案 0 :(得分:2)

因此,如果我理解正确,您想直接从相机胶卷上传内容?根据{{​​3}},我要说的是您需要的重要代码是:

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

信息词典将传递给您的媒体选择器代表:

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

然后,您应该可以在filePath的来电中使用setFile

答案 1 :(得分:1)

看看here,你可能会发现一些有用的东西。

希望这有帮助。

编辑: 对于更简单的内容,您可以使用此answer

中发布的代码

暗示您需要在上传之前将文件复制到某处,尤其是在文件很大的情况下。