编辑
2025-01-22
工作知识
0
请注意,本文编写于 135 天前,最后修改于 135 天前,其中某些信息可能已经过时。

目录

一、为什么要文件中转站
二、搭建apache服务器
三、中转站的上传,下载,删除
3.1 上传
3.2 下载
3.3 删除
3.4 脚本
四、定期整理文件
五、简单的提示界面

为了开发调试方便,这里基于apache2搭建了一个adv的文件上传下载服务器站点,地址是172.25.130.31。本文总结搭建方法,和操作步骤,从而真正意义上实现文件中转站的基本功能

一、为什么要文件中转站

鉴于我们的开发方式是通过服务器上的chroot环境进行开发,而我们的烧录通常是在linux/windows上通过烧录工具的方式,这就导致了我们需要在chroot环境中通过scp的方式将文件复制过来,假设我主机的ip地址是124,那么我需要如下:

scp boot.img root@172.25.80.124:/home/kylin

如果我们的目标ip经常发生改变,那么这个124会经常修改,这就导致我们传输文件比较繁琐。

我们知道,解决任何问题,都可以添加一个中间者,这样,发送者只需要关心发给中间者即可,接受者只需要从中间者接受。

于是文件中转站的角色便诞生了。

二、搭建apache服务器

安装apache2

apt install apache2

使能dav fs

a2enmod dav a2enmod dav_fs

修改apache2配置

vim /etc/apache2/sites-available/000-default.conf <VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html/ Alias /file-hub /root/owner-workspace/file-hub <Directory /root/owner-workspace/file-hub> Options Indexes FollowSymLinks MultiViews AllowOverride None Require all granted DAV On AuthType Basic AuthName "WebDAV Restricted Area" AuthUserFile /etc/apache2/.htpasswd <LimitExcept GET OPTIONS> Require valid-user </LimitExcept> Order allow,deny allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>

重启apache2服务

systemctl restart apache2

因为我设置了/root/owner-workspace/file-hub作为我的中转站目录,所以需要使得其具有文件权限

chmod 775 /root chmod 775 /root/owner-workspace/ chmod 775 /root/owner-workspace/file-hub/

至此,apache服务器已经可以正常使用了,如下所示

image.png

三、中转站的上传,下载,删除

对于中转站的上传,下载和删除,可以通过命令如下:

3.1 上传

curl -s -u $USER:$PASSWD -T "{$filename}" "172.25.130.31/file-hub/" -o /dev/null

3.2 下载

curl -O -u $USER:$PASSWD "172.25.130.31/file-hub/$filename"

3.3 删除

curl -X DELETE -u $USER:$PASSWD http://172.25.130.31/file-hub/$filename

3.4 脚本

大家可以根据上面命令的变体,编写upload.sh和download.sh脚本,这样就实现了文件的上传下载,这里给出示范如下:

# upload.sh USER="root" PASSWD="Ky1inos" WEBDEV="dev.kpan.com" argv=$# is_dir(){ if [ -d $1 ] then for i in `ls $1` do is_dir $1/$i done else fn+="$1 " fi } main(){ if [ "$argv"x == "0"x ] then usage; exit 0 fi # 上传目录 fn= for i in $@ do is_dir $i done filename=`echo $fn | tr ' ' ','` curl -s -u $USER:$PASSWD -T "{$filename}" "$WEBDEV/file-hub/" -o /dev/null } main $@ # download main(){ if [ "$argv"x == "0"x ] then usage; exit 0 fi # 上传目录 fn= for i in $@ do is_dir $i done filename=`echo $fn | tr ' ' ','` curl -O -u $USER:$PASSWD "$WEBDEV/file-hub/$filename" } # delete.sh main(){ if [ "$argv"x == "0"x ] then usage; exit 0 fi # 上传目录 fn= for i in $@ do is_dir $i done filename=`echo $fn | tr ' ' ','` curl -X DELETE -u $USER:$PASSWD "$WEBDEV/file-hub/$filename" }

上面脚本完成了基本功能,但是很多边界并没有考虑,大家在自己实现的时候可以考虑更全面一点

四、定期整理文件

我们作为中转站,需要每天按照日期归档文档,脚本如下:

#!/bin/bash FILE_HUB_DIR="/root/owner-workspace/file-hub" cd ${FILE_HUB_DIR} DATE=`date +%Y-%m-%d` [ -d ${DATE} ] && mv ${DATE} "${DATE}_bak" mkdir ${DATE} for file in $(ls ${FILE_HUB_DIR}) do [ -d ${file} ] && continue mv ${file} ${DATE}/ done COUNT=`ls ${DATE} | wc -l` if [ "${COUNT}"x == "0"x ] then alias rmdir=rmdir rmdir ${DATE} fi

脚本临时写出来,逻辑比较简单,为了让其能够正常的按天运行,如下配置crontab

crontab -e 0 1 * * * /usr/local/bin/organize_files.sh

五、简单的提示界面

根据上面的操作,我们已经完成了中转站的基本功能,为了让别人登录服务器的时候,更清楚我们登录了中转站,所以我们需要编写一个index.html,如下

vim /var/www/html/index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>File Hub</title> <style> body { font-family: Arial, sans-serif; background-color: #f4f4f4; margin: 0; padding: 0; display: flex; justify-content: center; align-items: center; height: 100vh; } .container { background-color: white; padding: 20px; border-radius: 8px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); text-align: center; } a { text-decoration: none; color: #007BFF; } a:hover { text-decoration: underline; } </style> </head> <body> <div class="container"> <h1>欢迎使用麒麟文件中转站</h1> <p>请登录到 <a href="http://172.25.130.31/file-hub">http://172.25.130.31/file-hub</a> 查看当前中转站内容.</p> </div> </body> </html>

此时页面如下:

image.png

至此,我们完成了一个文件中转站的基本功能。欢迎大家使用