在iOS上从磁盘向服务器发送数据而不加载到ram

在iOS上从磁盘向服务器发送数据而不加载到ram,ios,memory-management,Ios,Memory Management,我正在开发一个有时需要向服务器发送大文件(500MB)或更多文件的应用程序。一般来说,文件已经存储在磁盘上,并且我将拥有本地文件URL,是否有一种方法可以创建NSMutableRequest,而无需首先将磁盘中的所有数据加载到NSData中 一次从磁盘上读取几MB的数据,然后发送出去,然后重复,直到它全部消失,这会很好。这方面最好/最有效的方法是什么 编辑 基本上,如果我想上传一个10GB的视频,由于内存限制,在系统终止我的应用程序之前,我将永远无法将其全部放入NSData中。基本上,你需要以位

我正在开发一个有时需要向服务器发送大文件(500MB)或更多文件的应用程序。一般来说,文件已经存储在磁盘上,并且我将拥有本地文件URL,是否有一种方法可以创建NSMutableRequest,而无需首先将磁盘中的所有数据加载到NSData中

一次从磁盘上读取几MB的数据,然后发送出去,然后重复,直到它全部消失,这会很好。这方面最好/最有效的方法是什么

编辑


基本上,如果我想上传一个10GB的视频,由于内存限制,在系统终止我的应用程序之前,我将永远无法将其全部放入NSData中。

基本上,你需要以位读取大的本地文件,然后通过网络发送。您可以使用基础类<代码> NStPixStudio。p> 样本代码来自(Objective-C):

Swift 3中,可能是这样的:

func setUpStream(forFile path: String) -> InputStream? {
    guard let stream = InputStream(fileAtPath: path) else {
        return nil
    }
    stream.delegate = self
    stream.schedule(in: RunLoop.current, forMode: .defaultRunLoopMode)
    stream.open()

    return stream
}

(您还需要采用该协议,但我想这足以让oyu启动…

除非该设备有一些专用硬件连接到“磁盘”和无线电,否则我认为“不将数据加载到RAM”就不可能发送数据。很抱歉,您应该在不必立即将其全部加载到RAM的情况下指定,一次只需要几MB基本上如果我有一个10GB的视频想要上传,在系统由于内存限制而终止我的应用程序之前,我将永远无法将其放入NSData。请检查:这似乎是关于写入磁盘,但相同或类似的API应该会有所帮助
func setUpStream(forFile path: String) -> InputStream? {
    guard let stream = InputStream(fileAtPath: path) else {
        return nil
    }
    stream.delegate = self
    stream.schedule(in: RunLoop.current, forMode: .defaultRunLoopMode)
    stream.open()

    return stream
}