在线访问目录,分享文件给朋友下载

什么是在线访问目录?其实就是通过网络去查看目录中有哪些文件,以及通过网络去获取这些文件。

在电脑或手机上查看文件,文件是存储在本地硬盘里的,我们是通过文件管理器去查看。相比之下,在线访问可以理解为用浏览器查看一个远处电脑上的文件,这就方便了我们查看和分享文件。

如果想和朋友分享文件,我们可以把文件放到电脑上已经能在线访问的目录中,这样其他人就可以通过网络去下载这些文件(不用再借助网盘、或者聊天软件中转,当然需要你的电脑能被那个人访问才行)。

但不仅仅是下载,如果你用浏览器打开过一些音频或者视频的网址,你会发现浏览器可能会直接播放它们,那是打开的是浏览器支持打开的格式,比如 mp3、mp4、PDF、纯文本文件 txt 等,如果访问这些文件的网址,浏览器都是会默认打开。当访问不支持的文件格式时,比如 mkv,浏览器默认会进行下载。

通过网络访问,也不仅仅只是能用浏览器去访问,其他程序只要有这样的功能,同样可以访问网络上的文件,而不只是本地的文件。就比如有一些播放器,给它一个网址,它能直接播放在线的视频。一个例子是: Syncplay 在线同步看电影 – 技焉洲 ,这篇文章能够诞生,正是因为我需要视频文件能通过网络访问,然后通过 Syncplay 和朋友一起在线播放

下面是能分享目录到网络上的一些程序和它们的使用方法。

Dufs

Dufs 是一个文件服务器,支持通过浏览器进行文件的上传、下载,有简单的权限控制,支持 WebDAV,是一个很不错的网络共享目录工具。

使用 Rust 开发,整个程序就是一个二进制,复制到机器上就能运行,非常方便又小巧,非常推荐。

Github: GitHub – sigoden/dufs: A file server that supports static serving, uploading, searching, accessing control, webdav…

安装流程: [[Dufs]] dufs 安装 – 技焉洲

dufs 虽然支持上传和删除,但用起来不方便,因此只推荐用于让文件能通过网络访问,不适合管理目录。

Nginx

通过 Nginx 在网络上分享文件应该是性能最好的方式之一了,但只支持查看,不能上传和删除,所以一切修改必须通过 SSH 连到服务器操作(如果是在服务器上的话),不太方便。

方法就是创建一个 server 配置,开启目录预览。

sudo vim /etc/nginx/sites-available/sharefile
server {
    listen       9050 default_server;
    listen       [::]:9050 default_server;
    server_name  _; # 能通过 ip 直接访问

    charset      utf-8;

    location / {
        root /home/vfly2/public; # 要在网络上开放的目录的根路径
        autoindex on;            # 显示目录
        autoindex_exact_size on; # 显示文件大小
        autoindex_localtime on;  # 显示文件时间
    }
}

启用配置

sudo ln -s /etc/nginx/sites-available/sharefile /etc/nginx/sites-enabled/sharefile

检查配置

sudo nginx -t

重启生效

sudo systemctl reload nginx

从网上找的图,因为没有再用 Nginx 分享目录了,可以看出来很简陋。


如果不是在 / 路径下共享,而是子路径下,用 root 可能就不合适了,另有一个 alias。

alias 和 root 有些许区别,当访问 /source2rss/filename.xml 时,如果用的是 root,实际会访问 /path/to/dir/source2rss/filename.xml ,也就是直接把路径复制到后面,使用 alias 时,实际访问的是 /path/to/dir/filename.xml

server {
    location /source2rss/ {
        alias /home/vfly2/source2RSS/rss/;
        autoindex on;            # 显示目录
        autoindex_format html;   # 以标准的 HTML 表格形式展示目录内容
        autoindex_exact_size off; # 不显示文件大小
        autoindex_localtime on;  # 显示文件时间
    }
}

如上,我希望访问 /source2rss/filename.xml 时,获得的是 /home/vfly2/source2RSS/rss/filename.xml 文件,若是用了 root,将会获得 /home/vfly2/source2RSS/rss//source2rss/filename.xml 这个文件,此文件根本不存在,就会显示 404。

增加访问密码

使用到 Nginx 的 auth_basic 模块。

首先,创建一个密码文件(例如 /etc/nginx/.htpasswd),并使用 htpasswd 命令添加用户和密码。如果你的系统中没有 htpasswd 命令,可以通过安装 apache2-utils 来获取它。

sudo apt install apache2-utils

创建密码文件

sudo htpasswd -c /etc/nginx/.htpasswd ahfei

运行这个命令后,系统会提示你输入密码。之后 .htpasswd 文件就会被创建,其中包含用户名和加密后的密码。

在配置文件中添加下面两行即可

        auth_basic "Restricted Content";
        auth_basic_user_file /etc/nginx/.htpasswd;

此时访问网站时,浏览器应该会提示输入用户名和密码。

美化页面

默认的页面非常简陋,实际上在启用了目录浏览的情况下,通过 Web 服务器访问一个没有 index.html 或类似首页文件的目录时,服务器通常会显示一个非常简陋的文件列表。

有一些方法能把这个默认列表替换成一个美观、功能丰富的界面。比如 lrsjng/h5ai: HTTP web server index for Apache httpd, lighttpd and nginx. ,没用过,感兴趣可以研究。

copyparty

GitHub: 9001/copyparty: Portable file server with accelerated resumable uploads, dedup, WebDAV, FTP, TFTP, zeroconf, media indexer, thumbnails++ all in one file, no deps

没用过,不过看它的功能,可以胜任文件管理器。

使用 Python 开发,支持全平台,包括安卓、iOS,但是移动平台都需要安装终端模拟器才能运行。

界面还行,支持中文。

Filestash

GitHub: mickael-kerjean/filestash: :file_folder: The Dropbox like web client for SFTP, S3, FTP, WebDAV, Git, Minio, LDAP, CalDAV, CardDAV, Mysql, Backblaze, …

没用过,但是看介绍很牛,以后有空用用

其他类似项目

Filebrowser:filebrowser/filebrowser: 📂 Web File Browser (github.com) ,用过,如果想在网页上管理目录,可以使用。

ZFile:zfile-dev/zfile: 在线云盘、网盘、OneDrive、云存储、私有云、对象存储、h5ai、上传、下载,功能很多,但是是用 Java 开发的,对于本文的需求来说,没必要。

Simple http server: TheWaWaR/simple-http-server: Simple http server in Rust (Windows/Mac/Linux) ,实际上这是一个 Web Server,和 Nginx 是同一种东西,只不过只有最基本的功能,因此自然也可以预览目录。使用 Rust 开发,支持 Windows/Mac/Linux 平台。没用过,看介绍不如直接用 Nginx。


原文链接: https://yanh.tech/2025/11/online-access-catalog/

版权声明:本博客所有文章除特別声明外,均为 AhFei 原创,采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 技焉洲 (yanh.tech)

保持更新 ٩(•̤̀ᵕ•̤́๑)ᵒᵏᵎᵎᵎᵎ 清晰恒益的实用技能,欢迎使用 RSS 订阅,如果能留言互动就更好了。

可在 Telegram 群组 https://t.me/vfly2 交流依文章步骤遇到的问题。

上一篇