如何实现浏览本地文件(根目录下包含多个子目录)?
核心步骤
const http
= require('http');
const path
= require('path');
const url
= require('url');
const fs
= require('fs');
const hostname
= '127.0.0.1';
const port
= 8010;
var documentRoot
= 'F:/doc';
var urls
= [];
const server
= http
.createServer((req
,res
)=>{
let pathname
= url
.parse(req
.url
).pathname
;
var urlname
= req
.url
;
var file
= documentRoot
+ urlname
;
console
.log("第一个pathname:" + pathname
);
console
.log("urlname:" + urlname
);
console
.log("file:" + file
);
if(pathname
== '/'){
fs
.readdir(documentRoot
, function (err
, files
) {
if(err
){
console
.log("files err");
res
.writeHeader(404,{
'content-type' : 'text/html;charset="utf-8"'
});
res
.write('<h1>文件读取错误</h1><p>你要找的页面不存在</p>');
res
.end();
}else{
res
.writeHeader(200,{
'content-type' : 'text/html;charset="utf-8"'
});
for (let i
= 0; i
< files
.length
; i
++) {
let filename
= files
[i
];
fs
.stat(filename
,function(error
,stats
){
if(error
){
res
.write('<h1>分析文件错误</h1><p>你要找的页面不存在</p>');
}else{
if(stats
.isDirectory()){
urls
.push(filename
);
res
.write('<a href="'+ filename
+ '">'+ filename
+'</a><br>');
}else{
res
.write( files
[i
] +'<br>');
}
if(i
== files
.length
-1){
res
.end();
}
}
});
}
}
});
}else if(pathname
!== "/favicon.ico" && pathname
!== "/"){
let linkfilename
= pathname
.split("/")[pathname
.split("/").length
-1];
console
.log("linkfilename:" + linkfilename
);
let canRedirect
= false;
for (let j
= 0; j
< urls
.length
; j
++) {
if(linkfilename
== urls
[j
]){
canRedirect
= true;
break;
}
}
if(canRedirect
){
docRoot2
= documentRoot
+ pathname
;
console
.log("可以跳转了");
let backurl
= "";
for(let k
=0; k
< pathname
.split("/").length
-1; k
++){
backurl
+= "/" + pathname
.split("/")[k
];
}
console
.log("backurl222" + backurl
);
if(backurl
== ""){
backurl
="/";
}
console
.log("pathname:" + pathname
);
console
.log("docRoot2:" + docRoot2
);
console
.log("backUrl:" + backurl
);
res
.writeHeader(200, {'content-type': 'text/html;charset="utf-8"'});
res
.write('<a href="'+ backurl
+ '">../返回上一级</a><br>');
fs
.readdir(docRoot2
, function (err
, files2
) {
if(err
){
console
.log("files err");
res
.writeHeader(404,{
'content-type' : 'text/html;charset="utf-8"'
});
res
.write('<h1>文件读取错误</h1><p>你要找的页面不存在</p>');
res
.end();
}else{
console
.log("子文件大小:" + files2
.length
);
for (let m
= 0; m
< files2
.length
; m
++) {
let filename2
= files2
[m
];
let statfilename
= docRoot2
+"/" + files2
[m
];
let linkpathname2
= pathname
+ "/" + files2
[m
];
console
.log(statfilename
);
console
.log(linkpathname2
);
fs
.stat(statfilename
,function(error2
,stats2
){
if(error2
){
res
.write('<h1>分析文件错误</h1><p>你要找的页面不存在</p>');
}else{
if (stats2
.isDirectory()) {
urls
.push(filename2
);
res
.write('<a href="' + linkpathname2
+ '">' + filename2
+ '</a><br>');
}else{
res
.write( files2
[m
] +'<br>');
}
if(m
== files2
.length
-1){
res
.end();
}
}
});
}
}
});
}else{
console
.log("错误了");
res
.writeHeader(404,{
'content-type' : 'text/html;charset="utf-8"'
});
res
.write('<h1>404错误</h1><p>你要找的页面不存在</p>');
res
.end();
}
}
});
server
.listen(port
,hostname
,()=>{
console
.log(`Server running at http://${hostname}:${port}/`);
})
实现效果
转载请注明原文地址:https://blackberry.8miu.com/read-40436.html