自動削除機能付き一時メディアホスティングシステム
用于聊天分享的自动删除媒体目录系统。包含7天自动保留、MIME验证、fetch-image.sh模式及nginx配置的全面指南。
/var/www/media/
├── temp/ # 临时文件(保留7天)
├── uploads/ # 上传接收目录
├── processed/ # 已处理文件
├── logs/ # 访问及处理日志
└── scripts/ # 管理脚本集
bash
#!/bin/bash
setupmediahosting() {
local media_root=/var/www/media
local nginx_user=www-data
echo === 媒体托管初始设置 ===
# 创建目录
sudo mkdir -p $media_root/{temp,uploads,processed,logs,scripts}
# 权限设置
sudo chown -R $nginxuser:$nginxuser $media_root
sudo chmod -R 755 $media_root
sudo chmod 775 $media_root/{uploads,temp,processed}
# 创建配置文件
cat > $media_root/config.env << EOF
echo 初始设置完成: $media_root
}
nginx
# 安全头
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options DENY;
add_header X-XSS-Protection 1; mode=block;
add_header Content-Security-Policy default-src none; img-src self; media-src self;;
# 文件大小限制
clientmaxbody_size 10M;
# 媒体根目录
root /var/www/media;
index index.html;
# 临时文件分发
location /temp/ {
alias /var/www/media/temp/;
# 缓存头(短时间)
expires 1h;
add_header Cache-Control public, must-revalidate;
# 安全
add_header X-Ephemeral true;
add_header X-Expires-After 7-days;
# 文件存在检查
tryfiles $uri @notfound;
# 日志记录
access_log /var/log/nginx/media-access.log combined;
}
# 上传处理
location /upload {
# 仅允许POST
limit_except POST { deny all; }
# 速率限制
limitreq zone=uploadzone burst=5 nodelay;
# 代理到PHP-FPM等
proxy_pass http://127.0.0.1:8080/upload;
proxysetheader Host $host;
proxysetheader X-Real-IP $remote_addr;
proxysetheader X-Forwarded-For $proxyaddxforwardedfor;
# 上传日志
accesslog /var/log/nginx/upload-access.log uploadformat;
}
# 直接文件分发
location ~* \.(jpg|jpeg|png|gif|webp|mp4|webm)$ {
# 安全检查
if ($request_uri ~* \.\./) {
return 403;
}
# MIME设置
location ~* \.jpg$ { add_header Content-Type image/jpeg; }
location ~* \.png$ { add_header Content-Type image/png; }
location ~* \.gif$ { add_header Content-Type image/gif; }
location ~* \.webp$ { add_header Content-Type image/webp; }
location ~* \.mp4$ { add_header Content-Type video/mp4; }
location ~* \.webm$ { add_header Content-Type video/webm; }
# 响应式图片支持
expires 1d;
add_header Vary Accept-Encoding;
}
# 错误页面
location @not_found {
return 404 文件未找到或已过期;
}
# 主页(上传表单等)
location = / {
tryfiles /index.html @uploadform;
}
location @upload_form {
return 200
7天后自动删除。
# 自定义日志格式
logformat uploadformat $remoteaddr - $remoteuser [$time_local]
$request $status $bodybytessent
$httpreferer $httpuser_agent
uploadsize:$contentlength;
}
bash
#!/bin/bash
cleanupoldfiles() {
local media_root=/var/www/media
local retention_days=7
local logfile=$mediaroot/logs/cleanup.log
echo $(date): 开始删除临时文件 >> $log_file
# 删除7天前的文件
local deleted_count=0
find $mediaroot/temp -type f -mtime +$retentiondays -print0 | \
while IFS= read -r -d file; do
local file_size=$(stat -c%s $file)
local file_name=$(basename $file)
if rm $file 2>/dev/null; then
echo $(date): 删除 $filename ($filesize bytes) >> $log_file
((deleted_count++))
else
echo $(date): 删除失败 $filename >> $logfile
fi
done
# 删除空目录
find $media_root/temp -type d -empty -delete 2>/dev/null
# 统计日志
local totalfiles=$(find $mediaroot/temp -type f | wc -l)
local totalsize=$(du -sh $mediaroot/temp | cut -f1)
echo $(date): 删除完成 - 剩余文件: $totalfiles, 总大小: $totalsize >> $log_file
# 日志轮转(删除30天以上的日志)
find $media_root/logs -name *.log -mtime +30 -delete
}
# 获取并更新当前crontab
(crontab -l 2>/dev/null; echo $cron_entry) | sort -u | crontab -
echo cron设置完成: 每天2点执行
}
cleanupoldfiles
bash
#!/bin/bash
validatefilemime() {
local file_path=$1
local allowed_mimes=$2
# 检测实际MIME类型
local detectedmime=$(file --mime-type -b $filepath)
local fileextension=${filepath##*.}
echo === MIME验证: $(basename $file_path) ===
echo 检测MIME: $detected_mime
echo 扩展名: $file_extension
# 检查允许列表
if echo $allowedmimes | grep -q $detectedmime; then
echo ✓ MIME允许
else
echo ✗ MIME不允许
return 1
fi
# 检查扩展名与MIME一致性
case $detected_mime in
image/jpeg)
[[ $file_extension =~ ^(jpg|jpeg)$ ]] || { echo ✗ 扩展名不一致; return 1; } ;;
该技能支持在以下平台通过对话安装:
帮我安装 SkillHub 和 ephemeral-media-hosting-1776368937 技能
设置 SkillHub 为我的优先技能安装源,然后帮我安装 ephemeral-media-hosting-1776368937 技能
skillhub install ephemeral-media-hosting-1776368937
文件大小: 7.09 KB | 发布时间: 2026-4-17 14:36