喽大家好,我是胖达。本期视频来看看路径相关的内容。我们知道在网页中存在很多的图片,如果把这些图片和html文档放在一起,这样不光不美观,管理起来也非常不方便。通常会新建一个专门用来管理图像资源的文件夹,当需要查找图像的时候就会选择使用路径的方式来指定图像文件的位置。
路径的类型又分为两种,第一种是相对路径,第二种是绝对路径。今天先来了解一下相对路径。相对路径是相对于当前文件的位置来表示资源,也就是图片位置的路径表达方式。简单来说就是图片相对于当前html文档的位置。这里把相对路径的分类给大家列出来了,一个一个往下看。
·首先是同级路径。同级路径不需要在html里面写任何符号,只需要将文件名写到html属性里就可以了。在代码里看一下,这里有一个image,点jpg的图片和html文档处于同一级,所以在html的属性里直接写image,点jpg保存一下看看效果。
可以看到现在图片是正常展示的,同级路径下只需要在html属性里完整填写图像文件的名称就可以了。
·再来看第二个下级路径。当图像文件位于html文件下一集时,需要在html属性里完整填写同级文件夹的名称,然后斜杠写出对应图片文件的名称。
→首先打开资源文件夹,在这里新增一个images的文件夹。将image图片文件复制一份放到images文件夹里。
→打开vscode,新建一个gtml文档,这里新增一个image标签。
→在左侧资源管理器中刚刚新增的images文件夹已经显示出来了,打开以后会发现里面有一个image,点jpg的图片。把这个路径写一下,在src属性里面写入位于当前html文件同级的images文件夹的名称,使用符号斜杠找到image,点gpg,看一下效果。此时图片也完整显示出来了。
→如果在amager四文件夹里还有一个amager四文件夹,下级路径又该怎么写?在amager文件夹里再新建一个文件夹,打开vscod,在左侧的资源管理器中a major s文件夹下面又新增了一个a major s文件夹,在这里面又放了一张图片。
这张图片应该怎样让它展示出来?一起来看一下。
→首先找到同级的images文件夹,使用符号斜杠,此时vscode会提供给两个选项,一个是imagers文件夹,另一个是imager.gpg。选择imagers,imagers文件夹里面的imager.gpg的文件了,保存一下看看效果。
在浏览器中这两张图片都完美的展现出来了。
最后来看一下相对路径里面的。上级路径使用的符号是点点杠。上级路径又应该怎么理解?也就是图像文件是位于当前这个 hd ml文件的上一集。
在练习文件夹里新增一个名为 hd ml的文件夹,打开vs code,选择刚刚新增的文件夹,选择新建文件,这里需要新增一个 hd ml文档。在当前 hd ml文档中,如果想要调用上一级的 image 点 j p g 的图片应该怎么做?在 sr c 属性里面使用点点杠。
这里 vs code提供了上一集路径中存在的文件,选择 image 点 j p g,在浏览器中看下效果,此时图片也是正常显示的。如果hd ml文件藏得更深一些,把当前的文件复制一份,新增一个hd ml文件夹,将复制的文档粘贴一下,打开刚刚复制的文档,修改sr c属性里面的值,使用点点杠。
此时是没有找到 amage 点 j p g 的文件,这个时候就需要重复刚刚的操作,点点杠就能找到需要到的 amage 点 jbg 的文件了,保存一下看看效果。这里可以看到图片还是正常显示出来了。
本期视频主要了解了相对路径的三种分类,一个是同级路径,一个是下级路径,还有一个是上级路径。希望小伙伴们下来可以好好练习一下,这对于后期的内容非常重要。下期再来聊聊绝对路径。本期的内容到此结束,感谢观看,下期再见。
歌Chrome中的检查元素功能可以帮助你查看网页上特定元素的HTML源代码。在本教程中,我将向你展示如何使用此功能提取任何网页的整个HTML代码。
网站的HTML源代码是web浏览器用来呈现页面并根据页面上应用的HTML、CSS和JS代码和规则进行显示的代码。网站的源代码,即网站的结构,是公开的,而且必须公开,以便浏览器能够正确显示。
现代网络浏览器允许用户查看他们正在查看的网页的HTML源代码。此功能对网页设计者和开发人员的设计和开发工作特别有用。通过查看网站(或网页)的HTML源代码,你可以了解网站的结构、使用的HTML元素以及应用的CSS样式。这不仅是学习如何使用HTML和CSS进行设计和编码的好方法,也是测试自己的设计和检查结果页面上是否有错误的地方的好方法。
Web浏览器中页面的源代码通过Ctrl+U键盘快捷键或右键单击页面并选择“查看页面源代码”选项来显示。这显示了页面加载时的完整HTML代码,它捕获了页面的静态状态,即使页面具有动态功能,其内容也不会随着时间的推移而变化,服务器端或客户端也是如此。
要查看动态生成页面(即通过JS生成的页面)或具有动态变化内容的页面(即具有不断变化的新闻流的新闻网站或具有不断变化界面的社交网络)的HTML源代码,我们可以使用谷歌Chrome的检查功能,我将在下面详细演示。
使用检查功能查看网页源代码的美妙之处在于,你可以查看和获取在给定时间完全有效的HTML代码,这在具有变化和移动元素的页面上非常有用,这些元素会显示和消失。
在检查模式下,你可以对页面上任何HTML元素的内容、属性和样式进行编辑。不过,这些更改只对你可见,不会以任何方式对你正在查看的网站进行永久更改。
现在,让我们看看这是如何工作的。
1、启动Chrome浏览器,打开你选择的网页。
2、右键单击页面上的任何位置,然后从下拉菜单中选择“检查”。也可以使用Ctrl+Shift+I键盘快捷键。
这将打开浏览器窗口右侧或底部的“开发人员工具”部分,具体取决于你的屏幕大小和布局。
开发人员工具部分由一个顶部菜单和下面的两个并排窗口组成。在左侧,你将看到页面的HTML源代码,这些代码可以逐个元素折叠和展开。在右侧,你将看到在左侧选择的每个元素的样式、事件侦听器和属性。
你将看到所有当前有效的HTML代码,其中包含所有元素,如标题、段落、列表、链接、图像甚至注释。代码量将是最小的,它在基本的HTML网页上没有复杂性,因此它将更快地显示。然而,在高流量、动态的网站上,有很多元素和功能,HTML源代码将相当长和复杂,因此需要更长的时间才能完全显示。
3、转到本节顶部,找到<html>标记,该标记通常位于doctype(文档类型)声明(例如 <!doctype html>)之后。
4、找到<html>标记后,按Ctrl+C或右键单击它,然后选择复制>复制outerHTML以复制页面的所有html源代码。
5、然后,你可以根据需要将此代码粘贴到文本或HTML文件中,并对其进行进一步检查和编辑。
在检查模式中,你还将看到内联样式和对外部样式表的引用(如果有的话)。此外,如果你在Chrome中应用了任何自定义用户样式,它们也将附加到你复制的HTML代码的底部。
今年国庆假期终于可以憋在家里了不用出门了,不用出去看后脑了,真的是一种享受。这么好的光阴怎么浪费,睡觉、吃饭、打豆豆这怎么可能(耍多了也烦),完全不符合我们程序员的作风,赶紧起来把文章写完。
这篇文章比较基础,在国庆期间的业余时间写的,这几天又完善了下,力求把更多的前端所涉及到的关于文件上传的各种场景和应用都涵盖了,若有疏漏和问题还请留言斧正和补充。
以下是本文所涉及到的知识点,break or continue ?
原理很简单,就是根据 http 协议的规范和定义,完成请求消息体的封装和消息体的解析,然后将二进制内容保存到文件。
我们都知道如果要上传一个文件,需要把 form 标签的enctype设置为multipart/form-data,同时method必须为post方法。
那么multipart/form-data表示什么呢?
multipart互联网上的混合资源,就是资源由多种元素组成,form-data表示可以使用HTML Forms 和 POST 方法上传文件,具体的定义可以参考RFC 7578。
multipart/form-data 结构
看下 http 请求的消息体
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryDCntfiXcSkPhS4PN 表示本次请求要上传文件,其中boundary表示分隔符,如果要上传多个表单项,就要使用boundary分割,每个表单项由———XXX开始,以———XXX结尾。
每一个表单项又由Content-Type和Content-Disposition组成。
Content-Disposition: form-data 为固定值,表示一个表单元素,name 表示表单元素的 名称,回车换行后面就是name的值,如果是上传文件就是文件的二进制内容。
Content-Type:表示当前的内容的 MIME 类型,是图片还是文本还是二进制数据。
解析
客户端发送请求到服务器后,服务器会收到请求的消息体,然后对消息体进行解析,解析出哪是普通表单哪些是附件。
可能大家马上能想到通过正则或者字符串处理分割出内容,不过这样是行不通的,二进制buffer转化为string,对字符串进行截取后,其索引和字符串是不一致的,所以结果就不会正确,除非上传的就是字符串。
不过一般情况下不需要自行解析,目前已经有很成熟的三方库可以使用。
至于如何解析,这个也会占用很大篇幅,后面的文章在详细说。
使用 form 表单上传文件
在 ie时代,如果实现一个无刷新的文件上传那可是费老劲了,大部分都是用 iframe 来实现局部刷新或者使用 flash 插件来搞定,在那个时代 ie 就是最好用的浏览器(别无选择)。
DEMO
这种方式上传文件,不需要 js ,而且没有兼容问题,所有浏览器都支持,就是体验很差,导致页面刷新,页面其他数据丢失。
HTML
<form method="post" action="http://localhost:8100" enctype="multipart/form-data">
选择文件:
<input type="file" name="f1"/> input 必须设置 name 属性,否则数据无法发送<br/>
<br/>
标题:<input type="text" name="title"/><br/><br/><br/>
<button type="submit" id="btn-0">上 传</button>
</form>
复制代码
服务端文件的保存基于现有的库koa-body结合 koa2实现服务端文件的保存和数据的返回。
在项目开发中,文件上传本身和业务无关,代码基本上都可通用。
在这里我们使用koa-body库来实现解析和文件的保存。
koa-body 会自动保存文件到系统临时目录下,也可以指定保存的文件路径。
然后在后续中间件内得到已保存的文件的信息,再做二次处理。
NODE
/**
* 服务入口
*/
var http = require('http');
var koaStatic = require('koa-static');
var path = require('path');
var koaBody = require('koa-body');//文件保存库
var fs = require('fs');
var Koa = require('koa2');
var app = new Koa();
var port = process.env.PORT || '8100';
var uploadHost= `http://localhost:${port}/uploads/`;
app.use(koaBody({
formidable: {
//设置文件的默认保存目录,不设置则保存在系统临时目录下 os
uploadDir: path.resolve(__dirname, '../static/uploads')
},
multipart: true // 开启文件上传,默认是关闭
}));
//开启静态文件访问
app.use(koaStatic(
path.resolve(__dirname, '../static')
));
//文件二次处理,修改名称
app.use((ctx) => {
var file = ctx.request.files.f1;//得道文件对象
var path = file.path;
var fname = file.name;//原文件名称
var nextPath = path+fname;
if(file.size>0 && path){
//得到扩展名
var extArr = fname.split('.');
var ext = extArr[extArr.length-1];
var nextPath = path+'.'+ext;
//重命名文件
fs.renameSync(path, nextPath);
}
//以 json 形式输出上传文件地址
ctx.body = `{
"fileUrl":"${uploadHost}${nextPath.slice(nextPath.lastIndexOf('/')+1)}"
}`;
});
/**
* http server
*/
var server = http.createServer(app.callback());
server.listen(port);
console.log('demo1 server start ...... ');
复制代码
CODE
https://github.com/Bigerfe/fe-learn-code/
*请认真填写需求信息,我们会在24小时内与您取得联系。