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