ASIHTTPRequest - 从相机胶卷上传文件
Posted
技术标签:
【中文标题】ASIHTTPRequest - 从相机胶卷上传文件【英文标题】:ASIHTTPRequest - Uploading files from the camera roll 【发布时间】:2012-04-12 08:27:36 【问题描述】:我目前需要将大文件从 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,我想这意味着你不能简单地这样做。
有没有办法解决这个问题?还是我必须以某种方式将视频文件导入应用程序的沙箱?
【问题讨论】:
【参考方案1】:如果我理解正确,您想直接从相机胶卷上传内容吗?基于docs,我想说您需要的重要代码是:
NSString *filePath = [[info objectForKey:
UIImagePickerControllerMediaURL] path];
信息字典被传递给您的媒体选择器的代表:
- (void) imagePickerController: (UIImagePickerController *) picker
didFinishPickingMediaWithInfo: (NSDictionary *) info;
然后您应该能够在调用setFile
时使用该filePath
。
【讨论】:
是的,正确:) 如果可能的话,我想直接从相机胶卷上上传。不幸的是,我想我会遇到一些问题,因为很遗憾我没有使用媒体选择器:(我有一个自定义媒体选择器,它使用 [AssetLibrary enumerateGroupsWithTypes] 遍历相机胶卷中的视频内容,它只迭代并返回ALAsset 对象,所以我不确定是否有任何方法可以获取信息字典。 那么在这种情况下;)我想知道这是否回答了您的问题? ***.com/questions/4545982/getting-video-from-alasset 所以我认为结论是将其复制到应用程序沙箱中的 tmpFile 并从那里上传。不理想。 :( 啊,是的,您在评论中提供的链接也是以下答案中的链接:)但是是的,这对我有帮助:)我会在另一篇文章中给出答案,因为它很快而且明确在帖子本身中提供,或者如果您使用链接编辑您的原始答案,我可以给您答案点,就像您最初在另一个答案之前所做的那样:)这样其他人可能会在他们跳过 cmets 时找到他们正在寻找的东西 :)但是非常感谢您的帮助,它已经很受欢迎了:)【参考方案2】:看看here,你可能会发现一些有用的东西。
希望这会有所帮助。
编辑: 对于更简单的事情,您可以使用answer中发布的代码
暗示您需要在上传文件之前将文件复制到某个地方,尤其是在文件很大的情况下。
【讨论】:
啊哈是的,第一个链接中的功能运行良好:) 感谢您的帮助!以上是关于ASIHTTPRequest - 从相机胶卷上传文件的主要内容,如果未能解决你的问题,请参考以下文章