1

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

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

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

setFile 需要字符串格式的文件路径。我目前遇到的问题是,您似乎不允许简单地从不在您的应用程序沙箱中的文件中获取文件路径?因为我需要上传一个不在我的应用程序中但在标准相机胶卷之外的文件。

我试图进行这个快速测试,看看我是否可以创建一个 NSData 对象并用相机胶卷中的文件中的数据填充它,并提供这样的路径:

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

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

有没有办法解决?还是我必须以某种方式将视频文件导入应用程序的沙箱?

4

2 回答 2

2

所以如果我理解正确,你想直接从相机胶卷上传东西吗?根据文档,我会说您需要的重要代码是:

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

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

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

然后,您应该能够filePath在调用setFile.

于 2012-04-12T08:58:12.447 回答
1

看看这里可能你会发现一些有用的东西。

希望这可以帮助。

编辑:对于更简单的事情,您可以使用此答案中发布的代码位

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

于 2012-04-12T09:17:34.690 回答