从文件中获取字节数据

Getting byte Data from File

我在做什么 我正在尝试获取我用 AVAudioRecorder 录制的要上传的音频文件(可能长达一个小时。例如播客)到我们的后端。除了上传到服务器之外,如果用户选择,它还需要能够 "Paused" 和 "Resumed"。因此,我相信,我需要在 NSData class 上使用 dataWithBytesNoCopy:buffer 来实现这一点。

我在哪里 我知道我可以使用传递的 self.mediaURL 属性:

获取数据
if (self.mediaURL) {

    NSData *audioData = [NSData dataWithContentsOfURL:self.mediaURL];

    if (audioData) {

        [payloadDic setObject:audioData forKey:@"audioData"];
    }

}

但是,这不会给我所需的功能。我正在尝试跟踪上传的字节数,以便在用户暂停时我可以继续。

问题 我如何使用提供的 self.mediaURL 以便我可以检索文件并能够像这个例子一样计算字节长度?

Byte *buffer = (Byte*)malloc((long)audioFile.size);
NSUInteger buffered =[rep getBytes:buffer fromOffset:0.0 length:(long)rep.size error:nil];

NSMutableData *body = [[NSMutableData alloc] init];
body = [NSMutableData dataWithBytesNoCopy:buffer length:buffered freeWhenDone:YES];

不要通过重新发明轮子让事情变得更复杂,而是使用系统给你的东西。 NSURLSession 让你做一个 background upload。您将任务交给会话(使用后台会话配置创建)然后走开。如果可以,上传会分段进行。不需要 "pause" 或 "resume";系统会处理一切。您的应用甚至不必 运行。如果需要身份验证,您的应用程序将根据需要在后台唤醒。该架构专为您描述的情况而设计。

如果问题是您希望随机访问文件数据而不必将整个内容读入大量 NSData,请使用 NSFileHandle。