为什么要用流来读取文件
我们都知道如果在服务器端上传一个视频,并且通过静态文件的方式返回给用户读取的话会有以下几点的缺点:
- 文件过大,整个读取占用服务器空间
- 静态访问可以在html中查看到视频的静态地址,安全性差
那么如果用流对文件进行读取,每次读取仅仅返回给用户部分的视频,比如一次返回5M,动态的进行读取,则可以大大的提高服务器的性能,并且保证安全性。
如何通过代码来实现
这里以读取一个txt文件来进行演示,视频涉及到读取的位置和终点位置 这里不做详细解释,会在之后的博客中补上。
首先创建一个a.py和a.txt文件,放在同一目录下,在txt文件中随意输入一些内容,然后在a.py文件中输入以下代码
def read_file_stream(filepath,length):
with open(filepath,’rb’) as f:
while True:
if f:
f.read(length)
else:
break
以上方法中 filepath为文件路径,使用时传入一个str类型的路径,length为每次读取字节长度,如输入2,则每次读取2个字节,while True是为了循环输出 如果f中有内容 则读取,如果没有则跳出循环,方法执行完毕
利用偏置进行流读取
什么是偏置进行读取,我们都知道有时候我不需要从头开始读取文件,就比如视频中用户点击进度条 我需要从进度条的位置开始读取文件,那么就需要加入偏置的概念,通过偏置来确定文件开始读取的位置,代码如下
def read_file_stream(filepath,length):
with open(filepath,’rb’) as f:
f.seek(2) #偏置函数
while True:
if f:
f.read(length)
else:
break
具体代码只是在前面流读取的代码中添加了f.seek(length)方法,这个方法意思为跳过前面length长度个字节开始读取,也就是所谓的偏置。
调用方法
read_file_stream(a.txt,2)
合理的运用好偏置和流读取有助于帮助提升服务器空间占用和解决安全读取静态文件的问题。