返回顶部
e

ephemeral-media-hosting临时媒体托管

自動削除機能付き一時メディアホスティングシステム

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.0
安全检测
已通过
1,551
下载量
免费
免费
0
收藏
概述
安装方式
版本历史

ephemeral-media-hosting

临时媒体托管

用于聊天分享的自动删除媒体目录系统。包含7天自动保留、MIME验证、fetch-image.sh模式及nginx配置的全面指南。

系统构成

目录结构

/var/www/media/
├── temp/ # 临时文件(保留7天)
├── uploads/ # 上传接收目录
├── processed/ # 已处理文件
├── logs/ # 访问及处理日志
└── scripts/ # 管理脚本集

基本设置

目录初始化

bash
#!/bin/bash

media-setup.sh

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

媒体托管设置


MAXFILESIZE=10M
RETENTION_DAYS=7
ALLOWED_MIMES=image/jpeg,image/png,image/gif,image/webp,video/mp4,video/webm
UPLOADRATELIMIT=100
EOF

echo 初始设置完成: $media_root
}

执行

setupmediahosting

nginx配置

nginx

/etc/nginx/sites-available/ephemeral-media


server {
listen 80;
server_name media.yourdomain.com;

# 安全头
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天后自动删除。



,video/ required>


;
add_header Content-Type text/html; charset=utf-8;
}
}

速率限制设置

http { limitreqzone $binaryremoteaddr zone=upload_zone:10m rate=10r/m;

# 自定义日志格式
logformat uploadformat $remoteaddr - $remoteuser [$time_local]
$request $status $bodybytessent
$httpreferer $httpuser_agent
uploadsize:$contentlength;
}

文件管理系统

自动删除cron

bash
#!/bin/bash

cleanup-ephemeral-media.sh

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设置示例

install_cron() { local cron_entry=0 2 * /var/www/media/scripts/cleanup-ephemeral-media.sh

# 获取并更新当前crontab
(crontab -l 2>/dev/null; echo $cron_entry) | sort -u | crontab -

echo cron设置完成: 每天2点执行
}

cleanupoldfiles

MIME验证系统

bash
#!/bin/bash

mime-validator.sh

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; } ;;

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 ephemeral-media-hosting-1776368937 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 ephemeral-media-hosting-1776368937 技能

通过命令行安装

skillhub install ephemeral-media-hosting-1776368937

下载

⬇ 下载 ephemeral-media-hosting v1.0.0(免费)

文件大小: 7.09 KB | 发布时间: 2026-4-17 14:36

v1.0.0 最新 2026-4-17 14:36
initial release

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部