HTML相对路径(Relative Path)和绝…

本文介绍了HTML中的两种路径写法——相对路径和绝对路径,并通过实例详细解释了如何在HTML文档中正确引用文件,如创建超链接及插入图片。

HTML相对路径(Relative Path)和绝对路径(Absolute Path)
转换为繁体中文

HTML初学者会经常遇到这样一个问题,如何正确引用一个文件。比如,怎样在一个HTML网页中引用另外一个HTML网页作为超链接(hyperlink)?怎样在一个网页中插入一张图片?......

(相关教程:HTML超链接HTML图片)

如果你在引用文件时(如加入超链接,或者插入图片等),使用了错误的文件路径,就会导致引用失效(无法浏览链接文件,或无法显示插入的图片等)。

为了避免这些错误,正确地引用文件,我们需要学习一下HTML路径。

HTML有2种路径的写法:相对路径和绝对路径。

HTML相对路径(Relative Path)

同一个目录的文件引用

如果源文件和引用文件在同一个目录里,直接写引用文件名即可。

我们现在建一个源文件info.html,在info.html里要引用index.html文件作为超链接。

假设info.html路径是:c:\Inetpub\wwwroot\sites\blabla\info.html

假设index.html路径是:c:\Inetpub\wwwroot\sites\blabla\index.html

在info.html加入index.html超链接的代码应该这样写:

<a href = "index.html">index.html</a>

如何表示上级目录

../表示源文件所在目录的上一级目录,../../表示源文件所在目录的上上级目录,以此类推。

假设info.html路径是:c:\Inetpub\wwwroot\sites\blabla\info.html

假设index.html路径是:c:\Inetpub\wwwroot\sites\index.html

在info.html加入index.html超链接的代码应该这样写:

<a href = "../index.html">index.html</a>

假设info.html路径是:c:\Inetpub\wwwroot\sites\blabla\info.html

假设index.html路径是:c:\Inetpub\wwwroot\index.html

在info.html加入index.html超链接的代码应该这样写:

<a href = "../../index.html">index.html</a>

假设info.html路径是:c:\Inetpub\wwwroot\sites\blabla\info.html

假设index.html路径是:c:\Inetpub\wwwroot\sites\wowstory\index.html

在info.html加入index.html超链接的代码应该这样写:

<a href = "../wowstory/index.html">index.html</a>

如何表示下级目录

引用下级目录的文件,直接写下级目录文件的路径即可。

假设info.html路径是:c:\Inetpub\wwwroot\sites\blabla\info.html

假设index.html路径是:c:\Inetpub\wwwroot\sites\blabla\html\index.html

在info.html加入index.html超链接的代码应该这样写:

<a href = "html/index.html">index.html</a>

假设info.html路径是:c:\Inetpub\wwwroot\sites\blabla\info.html

假设index.html路径是:c:\Inetpub\wwwroot\sites\blabla\html\tutorials\index.html

在info.html加入index.html超链接的代码应该这样写:

<a href = "html/tutorials/index.html">index.html</a>

HTML绝对路径(Absolute Path)

HTML绝对路径(absolute path)指带域名的文件的完整路径。

假设你注册了域名www.blabla.cn,并申请了虚拟主机,你的虚拟主机提供商会给你一个目录,比如www,这个www就是你网站的根目录。

假设你在www根目录下放了一个文件index.html,这个文件的绝对路径就是: http://www.blabla.cn/index.html。

假设你在www根目录下建了一个目录叫html_tutorials,然后在该目录下放了一个文件index.html,这个文件的绝对路径就是http://www.blabla.cn/html_tutorials/index.html

<!doctype html> <html> <head> <meta charset="utf-8"> <title>周年贺卡</title> </head> <body> <table align="center" border="0" height="1200px" width="700px" background="http://photonj.photo.store.qq.com/psc?/V10BXA3B23yE7o/cX4Vyn98zHAGUajflo5h*GR.kC9ZMTx7iz.6cF0JYPwj4ENCZXFpLX2MAqD0bvlkiAMHA.ntW1l*r14zbNn.fA!!/b&bo=FQNhBBUDYQQRECc!&rf=mood_app" style="background-size: 100% 100%;"> <tr> <td height="20%"></td> </tr> <tr> <td height="70%"> <p align="center">亲爱的${NAME}:</p> <p align="center">您在${FIRST}年${SCEOND}月${THIRD}日入职</p> <p align="center">时至今日</p> <p align="center">${MESSAGE}</p> <center> <svg t="1656659495372" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2293" width="32" height="32"> <path d="M512 901.746939c-13.583673 0-26.122449-4.179592-37.093878-13.061225-8.881633-7.314286-225.697959-175.020408-312.424489-311.379592C133.746939 532.37551 94.040816 471.24898 94.040816 384.522449c0-144.718367 108.146939-262.269388 240.326531-262.269388 67.395918 0 131.657143 30.82449 177.632653 84.636735 45.453061-54.334694 109.191837-84.636735 177.110204-84.636735 132.702041 0 240.326531 117.55102 240.326531 262.269388 0 85.159184-37.093878 143.673469-67.395919 191.216327l-1.044898 1.567346c-86.726531 136.359184-303.542857 304.587755-312.424489 311.379592-10.44898 8.359184-22.987755 13.061224-36.571429 13.061225z" fill="#E5404F" p-id="2294" data-spm-anchor-id="a313x.7781069.0.i0"></path> </svg> </center> <br> <br> <p align="right" style="margin-right: 30px;"> XXXX&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp </p> </td> </tr> <tr> <td height="10%"></td> </tr> </table> </body> </html>
08-28
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>唯美 </title> <meta name="keywords" content=" "> <meta name="description" content=" "> <meta name="author" content="www."> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link rel="stylesheet" href="css/reset.css" type="text/css" media="all"> <link rel="shortcut icon" href="index/images/favicon.ico"> <link rel="stylesheet" href="css/jquery.fancybox-1.3.4.css" type="text/css" media="screen"> <link rel="stylesheet" href="css/style.css" type="text/css" media="all"> <link href="css/prettyPhoto.css" rel="stylesheet" /> <script type="text/javascript" src="js/jquery.min.js" ></script> <script type="text/javascript" src="js/content_switch.js"></script> <script type="text/javascript" src="js/jquery.easing.1.3.js"></script> <script type="text/javascript" src="js/jquery.mousewheel.js"></script> <script type="text/javascript" src="js/jquery-ui.js"></script> <script type="text/javascript" src="js/cScroll.js"></script> <script src="js/jquery.cycle.all.latest.js" type="text/javascript"></script> <script src="js/jquery.color.js" type="text/javascript"></script> <script type="text/javascript" src="js/script.js"></script> <script type="text/javascript" src="js/functions.js"></script> <script src="js/prettyPhoto.js"></script> <!--[if lt IE 9]> <script type="text/javascript" src="./js/html5.js"></script> <link rel="stylesheet" href="./css/ie.css" type="text/css" media="all"> <![endif]--> <!--[if lt IE 8]> <div style=' clear: both; text-align:center; position: relative;'> <a href="http://windows.microsoft.com/en-US/internet-explorer/products/ie/home?ocid=ie6_countdown_bannercode"><img src="http://storage.ie6countdown.com/assets/100/images/banners/warning_bar_0000_us.jpg" border="0" height="42" width="820" alt="You are using an outdated browser. For a faster, safer browsing experience, upgrade for free today." /></a> </div> <![endif]--> <body onpaste="return false" ondragstart="return false" onmouseover="window.status='';return true" oncopy="return false;"> <frameset> <frame src="index.html"> </frameset> <script> function stop(){ alert('宝贝,我爱你!'); return false; } document.oncontextmenu=stop; </script> <body onselectstart="return false" onpaste="return false" oncopy="return false;" oncut="return false;" > <script> function checkhtml5() { if ($.browser.msie && parseInt($.browser.version, 10) < 9) { document.body.innerHTML="<div style=' clear: both; text-align:center; position: relative; height: 50px; margin-top: 30px; padding: 20px; background-color: red; color: white; font-size:20px;'>你的浏览器非常落后,不支持 HTML5!<br/>请使用 Chrome 14+/IE 9+/Firefox 7+/Safari 4+ 其中任意一款浏览器访问此页面。</a></div>"; } } </script> <head> <style> a.wb_sina { float:left; margin-top:20px; margin-left:15px; display:inline-block; padding:4px 10px; border-radius:3px; background-color:#e55345; background-image:-moz-linear-gradient(top,#e96249,#e03c40); background-image:-ms-linear-gradient(top,#e96249,#e03c40); background-image:-webkit-gradient(linear,0 0,0 100%,from(#e96249),to(#e03c40)); background-image:-webkit-linear-gradient(top,#e96249,#e03c40); background-image:-o-linear-gradient(top,#e96249,#e03c40); background-image:linear-gradient(top,#e96249,#e03c40); filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e96249',endColorstr='#e03c40',GradientType=0); background-repeat:repeat-x; text-shadow:0 -1px 0 rgba(0,0,0,.5); border:1px solid #cf2b28; color:#fff!important; box-shadow:0 1px 0 rgba(255,255,255,.2) inset,0 1px 0 rgba(0,0,0,.2); } a.wb_sina:hover { background-image:-moz-linear-gradient(top,#e03c40,#e96249); background-image:-ms-linear-gradient(top,#e03c40,#e96249); background-image:-webkit-gradient(linear,0 0,0 100%,from(#e03c40),to(#e96249)); background-image:-webkit-linear-gradient(top,#e03c40,#e96249); background-image:-o-linear-gradient(top,#e03c40,#e96249); background-image:linear-gradient(top,#e03c40,#e96249); filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e03c40',endColorstr='#e96249',GradientType=0); } a.wb_sina span { display:inline-block; vertical-align:-5px; margin-right:7px; height:20px; width:24px; background:url(./images/weibo.png) no-repeat; } a.wb_tencent { float:left; margin-top:20px; margin-left:15px; display:inline-block; padding:4px 10px; border-radius:3px; background-color:#0e7fcc; background-image:-moz-linear-gradient(top,#1288d4,#0771c1); background-image:-ms-linear-gradient(top,#1288d4,#0771c1); background-image:-webkit-gradient(linear,0 0,0 100%,from(#1288d4),to(#0771c1)); background-image:-webkit-linear-gradient(top,#1288d4,#0771c1); background-image:-o-linear-gradient(top,#1288d4,#0771c1); background-image:linear-gradient(top,#1288d4,#0771c1); filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#1288d4',endColorstr='#0771c1',GradientType=0); background-repeat:repeat-x; text-shadow:0 -1px 0 rgba(0,0,0,.5); border:1px solid #0D6EB8; color:#fff!important; box-shadow:0 1px 0 rgba(255,255,255,.2) inset,0 1px 0 rgba(0,0,0,.2); } a.wb_tencent:hover { background-color:#0e7fcc; background-image:-moz-linear-gradient(top,#0771c1,#1288d4); background-image:-ms-linear-gradient(top,#0771c1,#1288d4); background-image:-webkit-gradient(linear,0 0,0 100%,from(#0771c1),to(#1288d4)); background-image:-webkit-linear-gradient(top,#0771c1,#1288d4); background-image:-o-linear-gradient(top,#0771c1,#1288d4); background-image:linear-gradient(top,#0771c1,#1288d4); filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0771c1',endColorstr='#1288d4',GradientType=0); } a.wb_tencent span { display:inline-block; vertical-align:-5px; margin-right:7px; height:20px; width:24px; background:url(./images/weibo.png) no-repeat 0 -20px; } #abox { position: fixed; _position: absolute; right: 15px; z-index: 99999999; } </style> </head> <body> <body onLoad="checkhtml5()"> <div id="abox"> </div> <div class="page_spinner"> <div></div> </div> <div class="over"> <div class="centre"> <div class="main"> <!--header --> <header> <h1><span id="logo"><img src="images/logo1.png" alt="" usemap="#logo"></span></h1> <nav class="menu"> <ul id="menu"> <li id="nav1"><img src="images/nav1.png" alt=""><span>爱的宣誓</span></li> <li id="nav2"><img src="images/nav2.png" alt=""><span>恋爱历程</span> </li> <li id="nav3"><img src="images/nav3.png" alt=""><span>絮叨絮叨</span></li> <li id="nav4"><img src="images/nav4.png" alt=""><span>祝福我们</span></li> <li id="nav5"><img src="images/nav5.png" alt=""><span>爱的映像</span></li> <li id="nav6"><img src="images/nav6.png" alt=""><span>时光沙漏</span></li> </ul> </nav> <img src="images/spacer.gif" alt="" id="navigation" usemap="#navigation"> <map name="navigation" class="navigation"> </map> <map name="logo" class="map_logo"></map> </header> <!--header end--> <!--content --> <map name="back" class="map_back"></map> <article id="content"> <ul> <li id="page_Home"> <img src="images/bg_content.png" alt="" class="bg_cont"> <span class="back"><img src="images/nav1.png" alt="" usemap="#back"><a href="index.html#close">返回</a></span> <div class="pad"> <h2>爱的宣誓</h2> 人物:浟佳 & 宝贝<br /> 不在乎曾经拥有,只在乎天长地久。<br /> 爱,就要说出来!<br /> 再美好的回忆,也只是回忆;<br /> 再美丽的诺言,不到实现的那一刻,也只是一句空话。<br/> -- </div> </li> <li id="page_About"> <img src="images/bg_content.png" alt="" class="bg_cont"> <span class="back"><img src="images/nav2.png" alt="" usemap="#back"><a href="index.html#close">返回</a></span> <div class="pad"> <h2>恋爱历程</h2> <div class="relative"> <div class="scroll"> <span>人物:浟佳 & 宝贝</span> <p>    宝贝你还记得么?</p> <p>    XX年X月X日。</p> <p>    我们在xx相遇。</p> <p>    然后.........</p> <p>    过程.........</p> <p>    我爱你,我会一直陪在你身边</p> <p>    不离不弃</p> <p>     - </p> </div> </div> </div> </li> <li id="page_Talk"> <img src="images/bg_content.png" alt="" class="bg_cont"> <span class="back"><img src="images/nav3.png" alt="" usemap="#back"><a href="index.html#close">返回</a></span> <div class="pad"> <h2>絮叨絮叨</h2> <div class="relative"> <div class="scroll"> <div style="width:100%;float: left; border-bottom: 1px solid #CCCCCC;">浟佳<br/><span style="float: right"> --by </span></div> <div style="width:100%;float: left">分享我所知道的<br/><span style="float: right"> --by </span></div> </div> </div> </div> </li> <li id="page_Message"> <img src="images/bg_content.png" alt="" class="bg_cont"> <span class="back"><img src="images/nav4.png" alt="" usemap="#back"><a href="index.html#close">返回</a></span> <div class="pad"> <h2>祝福我们</h2> <div class="relative"> <div class="scroll"> <div style="min-height: 300px; padding-bottom: 50px;"> <!-- 多说评论框 start --> <div class="ds-thread" data-thread-key="yyu" data-title="bb" data-url="http://"></div> <!-- 多说评论框 end --> <!-- 多说公共JS代码 start (一个网页只需插入一次) --> <script type="text/javascript"> var duoshuoQuery = {short_name:"love90"}; (function() { var ds = document.createElement('script'); ds.type = 'text/javascript';ds.async = true; ds.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') + '/static.duoshuo.com/embed.js'; ds.charset = 'UTF-8'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ds); })(); </script> <!-- 多说公共JS代码 end --> </div> </div> </div> </div> </li> <li id="page_Blog"> <img src="images/bg_content.png" alt="" class="bg_cont"> <span class="back"><img src="images/nav5.png" alt="" usemap="#back"><a href="index.html#close">返回</a></span> <div class="pad"> <h2>爱的映像</h2> <div class="relative"> <div class="scroll"> <ul class="gallery fancybox"> <li style="line-height:120px"><a href="images/uploadimage/imglsh001.jpg" rel="prettyPhoto[gallery1]"><img src="images/uploadimage/imglsh001small.jpg" alt=""></a></li> <li style="line-height:120px"><a href="images/uploadimage/imglsh002.jpg" rel="prettyPhoto[gallery1]"><img src="images/uploadimage/imglsh002small.jpg" alt=""></a></li> <li style="line-height:120px"><a href="images/uploadimage/img003.jpg" rel="prettyPhoto[gallery1]"><img src="images/uploadimage/img003small.jpg" alt=""></a></li> <li style="line-height:120px"><a href="images/uploadimage/imglsh001.jpg" rel="prettyPhoto[gallery1]"><img src="images/uploadimage/imglsh001small.jpg" alt=""></a></li> <li style="line-height:120px"><a href="images/uploadimage/imglsh002.jpg" rel="prettyPhoto[gallery1]"><img src="images/uploadimage/imglsh002small.jpg" alt=""></a></li> <li style="line-height:120px"><a href="images/uploadimage/img003.jpg" rel="prettyPhoto[gallery1]"><img src="images/uploadimage/img003small.jpg" alt=""></a></li> <li style="line-height:120px"><a href="images/uploadimage/img004.jpg" rel="prettyPhoto[gallery1]"><img src="images/uploadimage/img004small.jpg" alt=""></a></li> <li style="line-height:120px"><a href="images/uploadimage/imglsh002.jpg" rel="prettyPhoto[gallery1]"><img src="images/uploadimage/imglsh002small.jpg" alt=""></a></li> <li style="line-height:120px"><a href="images/uploadimage/img003.jpg" rel="prettyPhoto[gallery1]"><img src="images/uploadimage/img003small.jpg" alt=""></a></li> <li style="line-height:120px"><a href="images/uploadimage/img004.jpg" rel="prettyPhoto[gallery1]"><img src="images/uploadimage/img004small.jpg" alt=""></a></li> </ul> </div> </div> </div> </li> <li id="page_Time"> <img src="images/bg_content.png" alt="" class="bg_cont"> <span class="back"><img src="images/nav6.png" alt="" usemap="#back"><a href="index.html#close">返回</a></span> <div class="pad"> <h2>时光沙漏</h2> <div id="loveHeart" style="margin-top: 30px;font-size: 25px;"> <span style="">宝贝你知道我爱你爱了多久了吗?</span> <div id="elapseClock" style="margin: 10px 0px 10px 0px;"></div> <img src="images/1.gif" />    <img src="images/2.gif" /><br/><br/> <div id="loveu"> 爱:从2014-2-6开始!<br/> <div class="signature" style="float: right; margin-right: 50px;">by 浟佳 </div> </div> </div> </div> </li> </ul> </article> <!--content end--> </div> </div> <div class="bg1"> <div class="main"> <!--footer --> <footer style="line-height:20px"> <div id="copyright"> <script language="JavaScript"></script> </div> <!-- {%FOOTER_LINK} --> </footer> <!--footer end--> </div> </div> </div> <script> $(window).load(function() { $('.page_spinner').fadeOut(); $('body').css({overflow:'visible'}); }) </script> <script type="text/javascript">//修改时光沙漏时间 var offsetX = $("#loveHeart").width() / 2; var offsetY = $("#loveHeart").height() / 2 - 55; var together = new Date(); together.setFullYear(2014, 02, 06); together.setHours(17); together.setMinutes(0); together.setSeconds(0); together.setMilliseconds(0); setTimeout(function () { adjustWordsPosition(); startHeartAnimation(); }, 3000); timeElapse(together); setInterval(function () { timeElapse(together); }, 500); adjustCodePosition(); $("#code").typewriter(); </script> <audio id="bgmMusic" src="http://www.51mp3ring.com/51mp3ring_com2/at200611121582079026.mp3" preload="auto" type="audio/mp3" autoplay loop></audio> <!--coded by koma--> <!--LIVEDEMO_00 --> </body> </head> </html>补充并修改该代码
05-21
<template class> <div class="building"> <div class="main"> <el-form ref="form" :model="loginform" label-width="60px" label-position="left" > <el-form-item label="用户名"> <el-input v-model="loginform.userName" label="left"></el-input> </el-form-item> <el-form-item label="密码" style="left: 0%"> <el-input v-model="loginform.pwd"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="submit()">登录</el-button> <el-button type="primary" @click="dialogFormVisible = true" >注册</el-button > <el-button style="text-align: center">取消</el-button> </el-form-item> </el-form> </div> <div > <el-dialog title="" :visible.sync="dialogFormVisible" append-to-body width="30%" class="registerStyle" custom-class="no-header-dialog"> <el-form :model="form" label-position="left" :rules="registerRules" ref="registerRef" > <el-form-item label="用户名" prop="userName"> <el-input v-model="form.userName" autocomplete="off" style="width: 200px; float: left" ></el-input> </el-form-item> <el-form-item prop="nickName"> <template #label> <span>昵</span>    <span>称</span> </template> <el-input v-model="form.nickName" autocomplete="off" style="width: 200px; float: left" ></el-input> </el-form-item> <el-form-item prop="pwd"> <template #label> <span>密</span>    <span>码</span> </template> <el-input v-model="form.pwd" autocomplete="off" style="width: 200px; float: left" ></el-input> </el-form-item> <el-form-item label="手机号" prop="phoneCode"> <el-input v-model="form.phoneCode" autocomplete="off" style="width: 200px; float: left" ></el-input> </el-form-item> <el-form-item> <template #label> <span>头</span>    <span>像</span> </template> <el-upload class="avatar-uploader" action="http://localhost:8081/file/upload" :show-file-list="false" :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload" style="width: 200px; float: left" > <img v-if="pic" :src="pic" class="avatar" /> <i v-else class="el-icon-plus avatar-uploader-icon"></i> </el-upload> </el-form-item> <el-form-item prop="roleId"> <template #label> <span>角</span>    <span>色</span> </template> <el-radio-group v-model="form.roleId" style="width: 300px; float: left" > <el-radio-button label="1">管理员</el-radio-button> <el-radio-button label="2">用户</el-radio-button> <el-radio-button label="3">教练</el-radio-button> </el-radio-group> </el-form-item> <el-form-item style="float: center"> <el-button type="primary" @click="register()">注册</el-button> <el-button @click="resetForm('form')">重置</el-button> </el-form-item> </el-form> </el-dialog> </div> </div> </template> <script> import { login } from "@/api/Login"; import { register } from "@/api/Login"; export default { name: "LoginView", data() { return { pic: "", formLabelWidth: "150px", dialogFormVisible: false, form: { roleId: 2, }, loginform: { userName: "", pwd: "", }, registerRules: { userName: [ { required: true, message: "请输入活动名称", trigger: "blur" }, { min: 6, max: 10, message: "长度在 6 到 10 个字符", trigger: "blur", }, ], nickName: [ { required: true, message: "请输入昵称", trigger: "blur" }, { min: 1, max: 6, message: "长度在 1 到 6 个字符", trigger: "blur" }, ], pwd: [ { required: true, message: "请输入密码", trigger: "blur" }, { min: 6, max: 10, message: "长度在 6 到 10 个字符", trigger: "blur", }, ], phoneCode: [ { required: true, message: "请输入手机号", trigger: "blur" }, { min: 11, max: 11, message: "请输入正确的手机号", trigger: "blur" }, ], roleId: [ { required: true, message: "请选择注册角色", trigger: "blur" }, ], }, }; }, methods: { //回显 handleAvatarSuccess(res, file) { this.pic = URL.createObjectURL(file.raw); this.form.pic = URL.createObjectURL(file.raw); }, //设置文件格式 beforeAvatarUpload(file) { const isLt2M = file.size / 1024 / 1024 < 10; if (!isLt2M) { this.$message.error("上传头像图片大小不能超过 2MB!"); } return isLt2M; }, //登录 submit() { login(this.loginform).then((resp) => { console.log(resp.data.data); if (resp.data.code == 200) { this.$message(resp.data.data.message); if (resp.data.data.user.roleId == 1) { this.$router.push("/admin"); } else if (resp.data.data.user.roleId == 2) { localStorage.setItem("userId", resp.data.data.user.id); this.$router.push("/user"); } else { this.$router.push("/coach"); } } else { console.log(resp.data.message); // location.reload(); } }); }, //注册 register() { register(this.form).then((resp) => { if (resp.data.code == 200) { this.$message.success(resp.data.message + "请登录"); this.dialogFormVisible = false; } else { this.$message.error(resp.data.message + "请重新输入"); this.$refs.registerRef.resetFields(); } }); }, //重置表单 resetForm() { this.$refs.registerRef.resetFields(); }, }, }; </script> <style> .avatar-uploader .el-upload { border: 1px dashed #d9d9d9; border-radius: 6px; cursor: pointer; position: relative; overflow: hidden; } .avatar-uploader .el-upload:hover { border-color: #409eff; } .avatar-uploader-icon { font-size: 28px; color: #8c939d; width: 178px; height: 178px; line-height: 178px; text-align: center; } .avatar { width: 178px; height: 178px; display: block; } .no-header-dialog .el-dialog__header { display: none; } .el-dialog .el-dialog__body { display: flex; justify-content: center; align-items: center; background: url("@/assets/register.jpg"); } .building { background: url("@/assets/login.jpg"); width: 100%; height: 100%; position: fixed; background-size: cover; opacity: 0.7; } .main { background: url("@/assets/login.jpg"); background-size: cover; /* 背景图片覆盖整个div */ background-repeat: no-repeat; /* 背景图片不重复 */ background-position: center; /* 背景图片居中显示 */ text-align: center; background-color: #fff; border-radius: 20px; width: 350px; height: 300px; margin: auto; position: absolute; top: 0; left: 0; right: 0; bottom: 0; display: flex; justify-content: center; align-items: center; } </style>图片上传完成,存储到数据库后路径变为blob形式
08-30
def extract_chapters(self): """从 .docx 中提取章节标题内容""" try: print("【调试】开始提取章节...") doc = Document(self.file_path) full_text = "\n".join(para.text for para in doc.paragraphs) matches = list(CHAPTER_PATTERN.finditer(full_text)) if not matches: print("【调试】未匹配到任何章节标题") return [] chapters = [] for i in range(len(matches)): chapter_match = matches[i] chapter_title = chapter_match.group(1).strip() start = chapter_match.end() end = matches[i + 1].start() if i + 1 < len(matches) else len(full_text) content = full_text[start:end].strip() chapters.append((chapter_title, content)) print(f"【调试】提取到章节:{chapter_title}") return chapters except Exception as e: print("【错误】提取章节失败:", e) return [] def extract_subtitles_from_chapter(self, chapter_title, chapter_content): """从一个章节中提取所有 <标题> 其内容""" print(f"【调试】正在处理章节:{chapter_title}") print(f"【调试】章节内容前100字:\n{chapter_content[:100]}") print("【调试】当前章节内容:\n", chapter_content[:300]) # 新增调试 results = [] last_end = 0 matches = SUBTITLE_PATTERN.findall(chapter_content) print("【调试】正则匹配结果:", matches) # 新增调试 for title, content in matches: if title.strip(): results.append({ '章节': chapter_title, '标题': title.strip(), '标题内容': content.strip() }) print(f" 【调试】提取到标题:{title}(长度:{len(content.strip())})") last_end = SUBTITLE_PATTERN.search(chapter_content, last_end).end() # 处理最后未匹配到标题的剩余内容(如果有的话) remaining = chapter_content[last_end:].strip() if remaining: print(f"【调试】章节末尾有剩余内容(长度:{len(remaining)}),忽略不处理") return results def convert_to_html(self, text): """将文本转为 HTML 格式""" html_lines = [f"<p>{line}</p>" if line.strip() else "<p> </p>" for line in text.split("\n")] return "\n".join(html_lines) def import_to_db(self): book_title = self.title_input.text().strip() if not book_title or not self.file_path: QMessageBox.warning(self, "输入错误", "请填写书名并选择文件") return print("【调试】开始提取章节内容...") chapters = self.extract_chapters() print("【调试】共提取到章节数量:", len(chapters)) if not chapters: QMessageBox.warning(self, "内容错误", "未提取到任何章节内容") return try: conn = POOL_E.connection() if not conn: raise Exception("无法从连接池获取数据库连接") with conn: with conn.cursor() as cursor: cursor.execute("SELECT COUNT(*) AS count FROM 普通古籍 WHERE 书名=%s", (book_title,)) result = cursor.fetchone() count = result['count'] if result else 0 if count > 0: QMessageBox.warning(self, "警告", "该书已存在,避免重复导入") return print("【调试】开始逐个章节处理并插入数据库...") for chapter_title, chapter_content in chapters: subtitles = self.extract_subtitles_from_chapter(chapter_title, chapter_content) if not subtitles: print(f"【调试】章节 {chapter_title} 未提取到标题内容,插入章节内容") sql = """ INSERT INTO 普通古籍 (书名, 章节, 章节内容, 标题, 标题内容, 笔记, 图片路径) VALUES (%s, %s, %s, %s, %s, %s, %s) """ html_chapter_content = self.convert_to_html(chapter_content) data = [ ( book_title, chapter_title, html_chapter_content, '', # 标题为空 '', # 标题内容为空 html_chapter_content, # 笔记 '' # 图片路径留空 ) ] else: print(f"【调试】章节《{chapter_title}》提取到 {len(subtitles)} 个标题") sql = """ INSERT INTO 普通古籍 (书名, 章节, 章节内容, 标题, 标题内容, 笔记, 图片路径) VALUES (%s, %s, %s, %s, %s, %s, %s) """ data = [] for item in subtitles: html_content = self.convert_to_html(item['标题内容']) data.append(( book_title, item['章节'], None, # 章节内容为空,因为已有标题内容 item['标题'], html_content, html_content, # 笔记 '' # 图片路径留空 )) cursor.executemany(sql, data) conn.commit() print(f"【调试】章节《{chapter_title}》已插入 {len(data)} 条记录") QMessageBox.information(self, "成功", f"《{book_title}》已导入成功!") folder_path = f"D:/古籍信息/{book_title}" if not os.path.exists(folder_path): os.makedirs(folder_path) except Exception as e: print("【错误】导入失败:", e) QMessageBox.critical(self, "错误", f"导入失败: {str(e)}") try: conn.rollback() print("【调试】事务已回滚") except: pass 这里再提取转化的时候是不是没管可能存在的图片,我想前面提取章节内容标题内容时把图片文字都算进去,图片我已经设置好了资源路径book_folder = f"D:/古籍信息/{self.note_book_name}",
最新发布
09-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值