00:01
来看一下文件存储。文件存储啊,是在每个项目中,就是每个框中基本上都会带的一个功能啊,一般会用于文件的一个写入,文件的一个读取。啊。拉网提供了一个强大的文件系统的抽象概念啊,就是得益于这个这个扩展包。它就是说LA的文件系统啊,集成使用本地文件系统,或者是这个亚马逊S3啊,或者是使用我们国内的一些其他的一些云存储,比较犀牛云这个阿里云的oss,而且它保证了每个系统的API图片,所以我们在切换这个存储的时候是非常简单的,只要切换配置就可以了。感受的配置,看一下文件系统的配置呢,是在这个卡菲啊。Systems这个配置来看一下。啊,这个配置啊,首先大概有这么常见的几个配置项啊,我们来一一介绍一下。
01:04
第一个是。就是说默认使用的文件的一个驱动,它使用的本地的一个驱动,对吧,使用本地驱动呢,就当我们默认使用这个文件啊,相关的一些操作时候,它会使用的是啊,实际上是这个配置。当然我们在使用文件操作的时候,是可以指定我们要使用的一些磁盘的啊,包括这个其实也是本地的一个配置,你看drivers。是这个logo,只不过它比它呢多了一个这个权限,还有一个就是可见性啊,多了一个URL啊,像S3这种就是一些云存储呢,它会要这个亚马逊的一些ID和K。啊,下面的配置呢,就是一个符号链接,也就是我们,呃,执行这个。啊,这个这个。创建链接的时候,它实际映射的一个位置,它是把嗯,Public下面的这个映射到这个此套以及目录下面的这个,这是为什么呢?是因为。啊,我们文件啊,一般是在这个我们的缓存目录sta目录里面去做处理,对不对,但是我们在这里面的文件呢,是对用户来讲,是就是对于框架以外的这个来讲的话,是不可见的,是不能访问的,我们对外能访问的只有public目录,是不是这是保证为了保证我们整个项目,项目整个系统的安全,对外访问只有public,所以。
02:19
说。啊,需要建立一个软链接,就是我们用户,比如把头像上传到了我们的目录,对不对,如果啊,不进行这个链接的一个创建的话。就是我们访问这个头像,在浏览器中访问这个头像是请求不到的啊,我们只能访问到public下,所以呢,是在就是这个配置,就是说啊,通过我们执行命令,可以在public下面建立一个链接,一个软链接去指向目录的某一个目录。啊,这个后面会说到,这是关于整个配置文件的一些配置。啊,接下来就说到这个磁盘了啊,磁盘呢,就是刚才我们说的这些啊配置,它称为磁盘,其实也就是各个的磁盘的一个配置吧,也叫磁盘嘛,它默认我们会使用这个嘛,啊,但我们要使用public的话呢。
03:10
嗯,就是说使用的是这个本地的一个驱动,它将文件存储在这个目录下面,但是为了让这些资源能够通过网络访问访问,我们要创建这个public,还有这个to到它的一个符号链接啊,习惯成为软链接,这种方式呢可以。呃,公开访问文件保留在同一个目录下,这个符号链接啊,我们简单的理解的话,可以理解为Windows的一个快捷方式,比如我们桌面的,像这些带这个的都是链接方式,对吧?它实际上指向的文字是哪呢?看打开文件的所在位置,实际上指向的是这个目录,对吧?你看这个目录。是不是?啊,那这个符号链接也是一样的,我们是在public下面建立一个符号链接,但实际上它指向的这个位置可能就是这个APP public啊,这个目录下。
04:00
这样的话,我们从public去请求某一个资源的时候啊,实际上访问的是这个某里面的资源,就能让用户访问了,对吧,因为我们的对外访问的这个入口的话,只有public嘛。好。接着看啊,要创建符号链接呢,可以使用这个命令啊link来创建啊,它这个命令啊会根据谁呢?会根据就是我们这个文件里面配置的这个额外的符号链接来创建,就是这个list里面配置的,我们不用配置其他的了,用它默认的这一个就可以了。啊,我们当这样的话,当我们执行这个命令的时候,就会建立一个这样的一个链接啊,就是链接到这里面执行一下啊。应该会执行失败。失败的原因是什么呢?就是。啊,因为我们这个Windows啊,还有这个这个这个。Li的啊,它建立这个链接的方式不一样啊,所以说啊,又加上我们。
05:01
用的是这个vita对不对,VI reta,就是当我们在这里创建这个链接的时候呢。相应的,我们。Windows它是不是它也要同步的想去创建一个这个链接对吧。对不对,因为我们使用的微格嘛,我们的代码都会同步,你就更别说文件了,肯定也会进行一个同步,就是Windows会和虚拟机进行一个同步,是不是好当虚拟机的,比如说这个符号链接创建好之后。当他在想进行。嗯,这个Windows的一个同步的时候也想在,就是Windows也想在public下面去建立一个链接嘛,这时候它建立不了,权限不够我们这个。那终端的权限不够,所以要怎么办呢?重新打开一个终端,然后以管理员身份运行。在这里输入CMD。啊,以关联身份运行。右键这里也可以啊,你点这个右侧的这个吧。
06:00
啊,点一个就可以了,接着进入到赫姆斯特的目录。找到我们的home加目录下的home。复制这个目录。啊,CD到这个目录之后呢。先把伦给关掉。之后使用v up重新启动。在管理员的这个命令。啊下启动这个微格人才。启动完成之后。重新连接,因为我们重重启了,所以这个终端就断掉了。SSA重新连接。连接之后进入项目目录。因为你现在还是在加目录嘛,进入code下。
07:00
啊,在这里执行pudi。冒号link创建符号链接。好,这时候就创建成功了,对吧,一定要记住,当你创建失败的时候,就出现上面这个错误的时候。就是说你的这个权限不够,你要以管理员的身份去打开一个这样的一个终端,先执行关机。啊,再执行启动。兄弟们不要直接reload重启。我之前试过一次reload是。啊,不好使,所以要先关机啊,先关机再启动就可以了。这时候执行完这个命令之后。我们来看一看。看看这个public目录下是不是多了一个这么一个链接。啊,一个链接文件。它指向的是。APP下的帕布雷克目录啊。所以我们在处理用户上传头像的时候,比如说用户上传下文件的时候,用户可以把文件上传到这里。
08:06
这样的话,通过public下面的这个目录的一个呃链接文件,就可以访问到用户上传的一个文件。这是关于链接这块的一个配置。一旦就是文件存储被创建的符号链接,我们就可以辅助函数access来创建文件的URL,因为这个access获取的就是public目录下的资源的一个URL,对吧?嗯。使用这个本地的这个local驱动啊,所有的文件操作都与这个啊,我们文件配置中的这个root的目录相关,默认情况下。啊,我们的设置的值是F量,因此。这个方法。会把文件就是存储在这个。这个AAPP这个目录下啊,就是我们这样写入一个文件。
09:00
就是文件存储它的这个目录啊,跟什么呢?跟我们这个磁盘的这个配置有关。对不对,比如这里啊,这里我们这个默认的这个磁盘,它的这个文件的目录存到哪里了?存到这个to storage part呢,就是获取了这个storage的目录啊,它下面的APP目录也就存到了这个APP目录下,知道吧,而我们的这个public磁盘呢,它是就又往下存了一层嘛,又往这个public下面存是吧,APP下面的public存到这里,所以。啊,我们如果使用的是public磁盘,就会存到这里啊,怎么选择磁盘呢?啊,就是在你操作的时候啊,使用这个Dis选择磁盘啊,你默认不写的话呢,它会使用默认的磁盘,默认的磁盘看看是什么默认的磁盘,这里是这default这个啊驱动是local对吧,就会使用默认的这个local,你如果使用这个disc。这个方法你去选择帕布里克就会使用这个配置啊。这些就先不看了。
10:02
关于其他的一些配置。那这里就是刚才说的获取磁盘的一个实例。呃,套这个门面可以和我们已经配置所有磁盘进行交互,可以使用啊put方法将文件存到默认的磁盘。如果没有使用Dis方法,将会使用默认的一个磁盘,就如果要使用其他的一个磁盘,就使用Dis去选择对应的一个磁盘就可以了,我们这里不使用第三方的原组,一般的话我们就会选择一下public啊,或者是直接使用默认的来处做处理。比如我们这个例子啊。看一下啊。嗯。Root还是在。Test controller里面。去写例子。把之前的代码删掉。好存储文件。
11:15
保存文件啊,使用这个铺的方法来进行文件的一个保存。这个是我们要写入文件的一个内容,比如我们写入这个哈,因为。嗯,这里你看现在它标标标亮了对吧,标亮了说明呃。他是找不到这个类的,然后手动去打,要么你就在这里引入他的这个命名空间,要么你就手动去打,让编辑器帮你提示啊,手动去输入。你看要找这个门面的这个啊,对,这样的话,它会自动往你引入,我们用编辑器的话,这时候它就不标章了。有时候编辑器也会给我们提醒一些错误。通过这个方法我们就呃。就是写入了一些这个内容存到了这个文件,那存到了哪里呢?因为没有加磁盘,没有选择磁盘,所以是存到了啊,我们的这个使用的默认的这个磁盘存到了F目录下,也就是到底目录的APP目录下。
12:13
来测试一下。嗯。啊回空啊,没有进行任何输出,但是我们看这个F下是不是多了一个。这个费用对不对,好把它删掉,这个JPG我们打开看不了。改成非点test txt这个文件不能看。啊,改成这个文件。再次执行。啊,多了一个文件,这是我们写作的一个内容是吧。如果我们选择了磁盘呢?啊,比如说第四个选择磁盘。
13:02
还使用这一同样的一个方式,我们创建一个F2,也写出这个HELLO2,但是这是我们选择磁盘选择D。选择public盘,这时候他就会按照什么的配置来走呢,按照我们的这个public的这个配置来走啊。就会存到APP public下啊,当然前面还有一个目录。接下来执行看一下啊,会不会在这里面多出来一个文件。刷新。是不是多了一个负二对吧。哎,Hello,二啊,这是我们磁盘的一个选择。关于保存文件。这里。嗯,先简单的保存文件,等会我们看到里再细说啊。嗯,接下来是看一看。和文件相关的一些。啊,操作。好,这个磁盘实例呢,也给大家做了一个演示使用第四个啊。
14:03
看一下检索文件使用get方法呢,可以去啊,获取一个文件的一个内容,返回该文件的原始字符串内容。行了吧,我们一路来测试一下。那如果一个是比如说二进制的一个文件,它是啊。嗯,检索文件。这两个先出出点,我们就不重复创建了。获取没有选磁盘,就是就是默认的磁盘也是获取这个费用啊,获取这个文件里面的一个内容看一看。啊,这个目录没改。TXT。
15:02
拿到了这个文件的一个内容。嗯,使用Excel呢,可以判断这个文件存不存在。他返回了。这个醋和F。啊,Miss呢,也差不多,或者一个类似,它会检测磁盘上是否缺少指定的一个文件。判断。文件存在不存在啊。这个变量啊,我们使用public吧。检查谁呢?检查f2.txt,看public下面是不是有的。所以它会返回这个。啊,这里没有变,没有大。把这个给注释掉。再来看一下。是返回处,我们这个文件存在啊,它publish布了一个目录下,它是有这个费用二的,那如果改成费用呢。
16:04
就会返回first。没有这个文件,这个用于检索文件。接着看。嗯,下载文件和我们就是说讲那个响应的时候,它的这个原理是一样的,也是就当我们请求的时候,我们只不过使用的是response里面的登录方法,这里是使用的这个门面的这个当录方法都是一样,就是生成一个响应强制浏览器下载给的文件,这个大家自己尝试一下。文件的urs,我们使用STEM文件提供的URL方法可以获取这个文件的一个路径。如果是使用的本地的local驱动。它,呃,返回的是一个相对的一个地址啊,如果使用的S3的系统,这是完整的一个路径,当然。啊,如果我们配置了这个。URL选项它也会返回。一个路径的啊,就是说完整的一个远程的UR地址的。
17:01
先看一看啊。文件URL。啊二四。Do you r。等于。嗯,使用它的UI方法,比如我们看一看。Text。他的一个。号是什么?刷新一下啊。是不是啊,这样相对的一个路径,这是因为我们使用的本地的驱动对吧,如果使用远程的一些驱动的话,会返成返回这个完整的这个URL。看到了吧,那如果。把这个字写上。哎,结果给复制上。
18:03
如果什么呢?如果你的这个。磁盘啊,访问的这个磁盘。它配置了这个URL选项的话,比如我们使用。Disc。Public。这个磁盘。看看它的返回这个链接是什么,那它里面只有只有非二,非二我们不要把这个搞错了。这时候你再看看它是什么?是不是UR地址一个完整的URL,就是因为我们的啊这个disc。啊,这里。Public配置了这个URL这个参数,所以它会给我们返回一个地址。看到了实际上它这个URL,它是使用的什么env里面的app.ul点点磁套。对不对,那。这个路径明显不对啊,它的local host吗?我肯定访问不了啊,我们的域名是这个block test,你访问local host你肯定访不了。啊,是不是打不开,所以说啊,还是有必要把env里面我们的路径给改回来。
19:06
改成我们真实项目的我们的域名啊在上面。这里啊,改成blog改text这个改过来之后呢,我们所有用到域名的地方呢,都是正确的了。看到了吧,来,接着去测试一下。刷新啊,这里就返回了blog test。这次我们去访问这个文件的内容,是不是就可以看到这个文件的内容了啊,其实不是很复杂,因为在这里面它只是进行一个字符串的一个连接嘛。对不对,连接了我们这个眼位下面里面的这个配置嘛。啊,这个就是说,呃,如果我们的这个URL给设置了,也是磁盘的配置里面配置的URL,它会返回一个完整的远程地址的一个链接,看到了不。那如果。呃,我们的这个磁盘就像比如我们用默认的磁盘没有配置这个URL这个这个选项,它就返回了一个相对路径。
20:03
就是手册里。对,说的。就是说注意我们要看一下,如果使用的是local驱动,想要公开访问的文件,我们应该放到这个public共享,因为我们只对它建立了一个链接是不是?好。看看文件的路径,Pass方法可以获取文件的路径。如果是local的话,就是本地的一个驱动,它返回的是文件绝对的路径啊,绝对路径注意这个绝对啊,如果是远程的驱动,像一些第三方的云存储返回的是啊,这个文件在这个远程云存储中的这个,呃,这个相对路径。这里我们只有本地驱动,拿本地驱动来看一下。嗯。这个返回值我也给补全吧。
21:05
文件路径啊。嗯,直接输入这个第一题pass。就看这个field的吧,我们这里面是TXT,不是GP。是不是绝对路径从后从根目录开始给我们找,一直到我们的项目目录study Apple这个费用对吧,就是这个pass啊。临时的一般用于线上的这种,远程的这种啊,存储才会用得着,就是给这个链接设置指定的一个有效期的。这个就是刚才我说的,如果我们本机定义的这个URL选项啊,就可以去使用这个URL的时候,可以给我返回完整的一个链接啊。哪个选项。嗯,文件的原数据就是可以通过这个size啊,还有last Mo啊这些方法去获取文件的,比如说大小,还有最后修改的一个时间。
22:06
嗯,看一看,我看看文件的大小吧。文件源数据。好,就看一个这个吧,下一个就那另外一个就不看了。这里是tax。好,只有五啊。比较小,因为我就写了一个字符串嘛。再往下看一看啊。保存文件啊,已经说过了,我们使用put。对不对,但是还有一种保存方式是什么呢?使用这个put for或者这个put as。
23:01
他这里接收的参数不一样啊,它这个可以是就说铺的费用呢,是可以接收。啊。一个文件流啊,将一个文件流去存储到指定的一个啊文件里面。而这个put as呢,在存储到一个文件里面的时候,会指定一个文件名,我们使用第一种方法的话,它会生成一个。啊,唯一的ID作为文件名,我们就尝试一下第一种吧,好吧。自动流失传输。飞啊飞飞使用的是这个HTTP。啊,这个命密空间的费用路径的话,我们去读取这个费点text就不选择磁盘了,直接使用超级。
24:00
Pass,然后费用这样text,比如我们创建啊,基于这个文件读取这个文件,创建一个文件流,然后在这个目录下去存储一个文件。看下效果。刷新一下。是不是多了一个目录里面给我们创建这个文件内容的话,和我们读取的这个文件内容是一样的。啊,这个就是居留的一个存储。接着往下看。这个你们自己试试就可以了,就多一个参数可以自定义文件名啊。然后文件数据的写入,就是持继续向这个文件里面去写入东西,喷在后面追加这个。Prop是在前面去嵌入。试试,还有这个移动。就是复制和移动都比较简单,原始的位置还有新的一个位置。嗯,这个就不写例子啊。文件上传,在我们的应用中,最常见的这个文件上传,就比如说用户的一个头像啊,还有照片啊,还一些文档。
25:06
啊,Love提供的这个四套方法可以轻松的处理,我们明天上传那个文稿啊,只要我们调这个四套方法就可以了,啊,再就是说request里面啊,取得这个费用。我们使用这个四套方法,可以快速的将文件啊进行存储。啊,当然使用的是默认的一个驱动。因为仅仅指定了这个目录名嘛,而且没有指定文件名,所以会就是说使用默认系统生成一个唯一的一个ID作为文件的一个名称。而文件的扩展名呢,是根据它的这个我们原始文件的一个类型来进行判断的。最后会返回给我们一个文件的路径,我们将这个路径存储到数据库就可以了。当然也可以去调用。啊,这个。Sta门面的put方法。
26:00
和这个执行一个相同的一个效果,这个是我们使用的request这个feel啊,然后使用它的这个套,还可以直接使用的这个put fill。都是一样的,因为我们的put fair这个第二个参数接收一个文件流嘛,对不对,用户我们上传的文件也是一个文件的一个流过来的嘛,所以可以使用这个put或者是put file as啊,指定文件名的时候。这名是可以什么什么呢,使用这个。啊,As啊,就是说request feel里面的store as,或者是啊,我们上面说过的流逝。这个保存文件的这个。啊,这个流逝传输里面的这个put few。它是可以指定文件名的,就是第三个参数。和这个as很像啊。而默认的是默认呢,我们这个四套方法呢,使用默认的磁盘。可以在第三个参数,就是套的第三个参数去指定。啊,这个磁盘使用哪个磁盘。
27:00
比如我们到时候就可以使用public磁盘,因为用户头像要让公开的,能访问吗?如果我们使用四套as,也可以将第三个磁盘作为啊这个参数。这个例子。我们在写实例的时候会演示一下这个上传,写头像上传的时候,如果现在给大家演示的话,还要创建表单,然后进行这个文件上传,比较麻烦。好,接着看一看其他的方法。还可以使用什么呢?使用啊这个get。啊。这个方法获取到文件的一个原始的名称,以及获取文件的一个扩展。来使用这个方法获取原始的名称和一个扩展。这个我们是使也是使用的request的这个对象的这个。
28:05
删除文件啊,删除文件使用。嗯,超级比例的方法,然后加上文件名就删除了。哎,如果你选择驱动的话,就会按照指定的一个磁盘去删除,这样我们不加的话就使用默认的啊,比如把。这个非点删除。看一下啊。刷新一下。这个文件啊,注意我再重新加载一下目录。哦,文件名不对。是不是没了这个文件啊,刚才文件名不对。删除文件。也是比较常用的。接着往下看啊,目录相关的一些操作,主要是获取目录下面的一个所有的文件,然后包括他们下面的子子目录啊,所有的一个目录,子目录,包括这个创建一个目录,删除目录。
29:10
啊,这个比较简单。嗯,自行尝试一下就可以。关于文件相关的处理,我们就主要用到这么些,其实最主要的使用要注意的地方就是文件的一个配置啊。你要。呃,使用哪个驱动,你要使用第四个去选择对应的一个驱动。还有就是呃,关于文件的一个。这个判断啊,包括文件的一个存储,这两个是比较用的,还有比较常用的,还有一个是流失的一个存储,也是比较常用的,在处理文件上传的时候,其实我们就使用的是一个流式的一个存储啊,就它第二个参数接触一个文件流,这里我们是用new去创建的这个。这个文件流,那如果是上传的话呢,这里可以换成啊这个。就是用户提交过来的那个文件。
30:01
相应的文件相关的就说到这里,不太清楚的可以继续看一下手册。
我来说两句