从1.7.9版开始,您可以使用autoindex_formatset json或xml,请参考此处的文档。
location / {
...
autoindex on;
autoindex_format json;
}
Run Code Online (Sandbox Code Playgroud)
自版本 1.7.9(2014 年 12 月 23 日发布)以来, NGINX 中包含的ngx_http_autoindex_module模块(为以斜杠字符结尾的请求生成目录列表:)添加了一个设置目录列表格式的指令: /autoindex_format
语法: 默认: ; 语境:
autoindex_formathtml | xml | json | jsonp;
autoindex_format html
http, server, location
启用此功能的 示例配置(对于 JSON):
location / {
autoindex on;
autoindex_format json;
}
Run Code Online (Sandbox Code Playgroud)
当使用 JSONP 格式时,回调函数的名称将使用callback请求参数设置。如果该参数丢失或为空值,则返回 JSON 格式。
JSON(P) 响应数据结构(方案)定义为:
callback( // when format directive jsonp AND callback argument in request
[ // a single one-dimensional Array (wrap) containing
{ // Objects representing directory entries, structured as:
"name" :"*" //String
, "type" :"directory"|"file"|"other" //String, ONLY 1 OF THESE 3
, "mtime":"Ddd, DD Mmm YYYY hh:mm:ss GMT" //String, RFC1123-date of HTTP-date defined by RFC2616
, "size" :* //Integer, ONLY PRESENT IFF "type":"file" !!!!!
} /*
, { // and repeating the above Object structure for each directory entry
} */
]
); // end callbackFunction-call when jsonp
Run Code Online (Sandbox Code Playgroud)
、"name"、"mtime"和应该是不言自明的"type":"directory"。重要的是要注意,该字段仅存在 IFF ,否则将完全省略(参见下面的示例)! "type":"file"
"size""type":"file"
"type":"other"值得进一步解释:
假设您做了一些在生产中从未做过的事情,并'root /;'在 Linux 系统上的配置中进行设置,然后进行索引/dev/,那么您将获得如下目录条目:
[
{ "name":"floppy", "type":"other", "mtime":"Mon, 23 Oct 2017 15:16:56 GMT" },
{ "name":"loop0", "type":"other", "mtime":"Mon, 23 Oct 2017 15:16:56 GMT" }
// and so forth
]
Run Code Online (Sandbox Code Playgroud)
可能还有其他例子"type":"other",如果你知道一些,请留言!
特殊的点当前/点父级 ( ., ..)和点文件/点文件夹 ( .hidden) 在响应中被过滤(不存在)!
有趣的是:特殊的 dot-current/dot-parent ( ., ..) 可以通过您的客户端代码添加,就像ngx_http_autoindex_module将它们硬编码到默认的 html 格式响应中一样。
以下是两个原始“格式”的“原始”响应示例。
注意:响应行结尾被硬编码为CRLF.
JSON(以及没有回调的 JSONP):
[
{ "name":"subdir", "type":"directory", "mtime":"Tue, 24 Oct 2017 16:16:16 GMT" },
{ "name":"image.jpg", "type":"file", "mtime":"Tue, 24 Oct 2017 16:16:39 GMT", "size":5 },
{ "name":"test.html", "type":"file", "mtime":"Tue, 24 Oct 2017 16:09:18 GMT", "size":5 }
]
Run Code Online (Sandbox Code Playgroud)
JSONP(回调 = foo):
注意:前导块注释是 JSONP 响应的一部分。
/* callback */
foo([
{ "name":"subdir", "type":"directory", "mtime":"Tue, 24 Oct 2017 16:16:16 GMT" },
{ "name":"image.jpg", "type":"file", "mtime":"Tue, 24 Oct 2017 16:16:39 GMT", "size":5 },
{ "name":"test.html", "type":"file", "mtime":"Tue, 24 Oct 2017 16:09:18 GMT", "size":5 }
]);
Run Code Online (Sandbox Code Playgroud)
一个非常简单的片段,使用 JSONP 回调并构建一个 HTML 表,旨在明确地阐明格式:
<script>
function foo(d){
var i= 0
, L= d.length
, r= '<table border="1" cellpadding="4px" style="border-collapse:collapse"><thead style="border-bottom:4px solid black">\n'
+ '<tr><th style="width:80%">Name</th><th>Type</th><th>Last Modified</th><th>Size</th></tr>\n'
+ '</thead><tbody>\n'
;
for(;i<L;++i)
r+= '<tr><td>' + d[i].name
+ '</td><td>' + d[i].type
+ '</td><td style="white-space: nowrap">' + d[i].mtime
+ '</td><td>' + (d[i].type==='file' ? d[i].size : '-')
+ '</td></tr>\n';
r+='</tbody></table>';
document.body.innerHTML=r;
}
</script>
<script> // JSONP Use your own preferred JSON(P) fetchmethod
/* callback */
foo([
{ "name":"subdir", "type":"directory", "mtime":"Tue, 24 Oct 2017 16:16:16 GMT" },
{ "name":"image.jpg", "type":"file", "mtime":"Tue, 24 Oct 2017 16:16:39 GMT", "size":5 },
{ "name":"test.html", "type":"file", "mtime":"Tue, 24 Oct 2017 16:09:18 GMT", "size":5 },
{ "name":"????", "type":"other", "mtime":"Tue, 24 Oct 2017 16:17:52 GMT" }
]);
</script>Run Code Online (Sandbox Code Playgroud)
这意味着从这里开始您可以在客户端对结果进行过滤和排序。您还可以根据文件类型/扩展名等链接图标。
让它随心所欲,祝您好运!
一些额外的灵感可能会在以下方面找到:
资料来源:
| 归档时间: |
|
| 查看次数: |
2878 次 |
| 最近记录: |