javascript - 使用 .get() 检索服务器上文件夹中所有文件名的数组
问题描述
我可以使用以下代码显示服务器上文件夹中所有文件的列表:
$(document).ready(function() {
$.get("/mockups/bryan/file_list/", function(allFiles) {
$("#fileNames").append(allFiles);
console.log(allFiles);
});
})
但是,它检索的数据是我的服务器生成的完全格式化的网页,如下所示:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
<title>Index of /mockups/bryan/file_list</title>
</head>
<body>
<h1>Index of /mockups/bryan/file_list</h1>
<pre><img src="/icons/blank.gif" alt="Icon "> <a href="?C=N;O=D">Name</a> <a href="?C=M;O=A">Last modified</a> <a href="?C=S;O=A">Size</a> <a href="?C=D;O=A">Description</a><hr><img src="/icons/back.gif" alt="[PARENTDIR]"> <a href="/mockups/bryan/">Parent Directory</a> -
<img src="/icons/image2.gif" alt="[IMG]"> <a href="092018-powersale_CTA.jpg">092018-powersale_CTA..></a> 2018-09-19 09:57 7.2K
<img src="/icons/image2.gif" alt="[IMG]"> <a href="092018-powersale_cat1.jpg">092018-powersale_cat..></a> 2018-09-19 09:26 41K
...
我只想要一个包含该文件夹中所有文件名称的数组,这样我就可以创建自己的页面来显示和链接到它们。
有一个更好的方法吗?也许 .get() 是错误的工具,或者我用错了。(或两者兼而有之。)我正要挖掘一些 RegEx 的东西来提取我想要的信息,但后来想“必须有更好的方法!”
解决方案
是的,有比 RegExp 更好的方法。从响应文本创建一个documentFragment,并从中提取链接。像这样:
$.get("/mockups/bryan/file_list/", function (allFiles) {
let fragment = document.createDocumentFragment();
let wrapper = document.createElement('div');
let fileNames = [];
// Put allFiles to the newly-created div
wrapper.innerHTML = allFiles;
// Append the elements from the div to the documentFragment
Array.from(wrapper.childNodes).forEach(node =>
fragment.appendChild(node);
});
// Collect links, and extract hrefs to fileNames array
let links = fragment.querySelectorAll('a');
let len = links.length;
for (let n = 5; n < len; n++) { // Starting from 5 excludes the list headers
fileNames.push(links[n].getAttribute('href'));
}
// Append filenames list to the page
$("#fileNames").append(fileNames.join('<br>'));
});
警告!仅供本地网络使用。不建议使用此代码在公共 Web 服务器上读取文件夹内容,使用服务器端代码将文件名发送到客户端。
将 DTD 和 html、head 和 body 标签添加到 div 有点 hackish,但是设置 innerHTML 会删除这些标签,并且只添加相关内容。
我已经从 href 属性中提取了文件名,但是如果链接文本不错,您可以使用textContent
属性而不是getAttribute
方法。链接的读取href
属性通常会添加值的完整路径。
推荐阅读
- powershell - 无法通过 Powershell 从站点下载文件。问题似乎与 TLS 1.2 有关
- python - 根据 i-1 处的值修改第 i 行的 pandas 数据框
- python - 在点位置的多个时间步长上提取 netCDF 变量的值
- neo4j - 节点已删除,无法用于创建关系
- sql - 具有恒定时间的 Oracle SQL sysdate
- vba - 从一组 OptionGroup 构建一个 SQL 字符串
- javascript - 由 Electron Builder 生成的二进制文件的操作系统特定目录
- amazon-ec2 - AWS Lambda EC2-Instances 客户端超时错误
- php - 如何遍历自定义分类类别
- android - Android Room 报错 ProductDatabase_Impl 不是抽象的,没有覆盖 ProductDatabase 中的抽象方法 getProductDao()