PixPro 一款个人需求的高效图床

彬彬
2024-07-21 / 7 评论 / 753 阅读 / 耗时: 20 ms / 正在检测是否收录...
温馨提示:
本文最后更新于2024年07月21日,已超过420天没有更新,若内容或图片失效,请留言反馈。

Test

前言

一款专为个人需求设计的高效图床解决方案,集成了强大的图片压缩功能与优雅的前台后台管理界面。

项目结构精简,提供自定义图片压缩率与尺寸设置,有效降低存储效率与带宽成本。

支持上传JPEG、PNG、GIF格式图片并转换为WEBP格式,支持上传SVG、WEBP图片。

支持本地存储,OSS存储,S3存储。可以通过把存储桶挂载到本地的方式解锁更多存储方式。

简洁美观的前端,支持点击、拖拽、粘贴、URL、批量上传。

瀑布流管理后台,方便管理图片,支持图片灯箱、AJAX无加载刷新。

支持自定义压缩率,默认60,可自定义修改。支持修改每日上传限制,单次上传限制

运行环境

推荐 PHP 8.1 + MySQL >= 5.7

本程序依赖PHP的Fileinfo、Imagick拓展,需要自行安装依赖。pcntl扩展(宝塔PHP默认已安装)

要求 pcntl_signal 和 pcntl_alarm 函数可用(需主动解除解除)。

配置信息安全

设置如下 nginx 规则

location ~* /config\.ini$ {
    deny all;
}

上传限制

编辑config/validate.php文件。同步修改static/js/script.js的头部内容

<?php
// 设置参数
$maxUploadsPerDay = 50; // 每天最多上传50次
$maxFileSize = 5 * 1024 * 1024; // 文件大小限制 5MB 修改这里同步修改 script.js

function isUploadAllowed($maxUploadsPerDay) {
    $cookieName = 'upload_count';
    $currentDate = date('Y-m-d');
    if (isset($_COOKIE[$cookieName])) {
        $uploadCounts = json_decode($_COOKIE[$cookieName], true);
        if ($uploadCounts['date'] === $currentDate) {
            if ($uploadCounts['count'] >= $maxUploadsPerDay) {
                return '上传次数过多,请明天再试';
            }
            $uploadCounts['count']++;
        } else {
            $uploadCounts = [
                'date' => $currentDate,
                'count' => 1
            ];
        }
    } else {
        $uploadCounts = [
            'date' => $currentDate,
            'count' => 1
        ];
    }
    // 设置 Cookie,过期时间为一天
    setcookie($cookieName, json_encode($uploadCounts), time() + 86400, "/");

    return true;
}

$uploadCheck = isUploadAllowed($maxUploadsPerDay);
if ($uploadCheck !== true) {
    echo json_encode(['error' => $uploadCheck]);
    exit();
}

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['image'])) {
    $file = $_FILES['image'];

    if ($file['size'] > $maxFileSize) {
        $maxFileSizeMB = $maxFileSize / (1024 * 1024);
        echo json_encode(['error' => '文件大小超过限制,最大允许 ' . $maxFileSizeMB . 'MB']);
        exit();
    }

    echo json_encode(['success' => '文件上传成功']);
} else {
    echo json_encode(['error' => '无效的请求']);
}
?>

访问 Typora

Test

## 演示站点:

源码下载:

本文共 384 个字数,平均阅读时长 ≈ 1分钟
2

海报

正在生成.....

评论 (7)

取消
  1. 头像
    1
    ·Windows 10 · Google Chrome
    沙发

    如果你热爱生活就不要浪费时间,因为时间组成了生活。

    回复 删除 垃圾
  2. 头像
    11040
    ·Windows 10 · Google Chrome
    板凳

    我寻了半生的春天,你一笑便是了。

    回复 删除 垃圾
  3. 头像
    胡子
    ·iPhone · Safari
    地毯

    风起了,你却消失了。

    回复 删除 垃圾
  4. 头像
    asd
    ·Android · Google Chrome
    第4楼

    把人类看做虫子的三体人似乎忘记了一个事实:虫子从来就没有被真正战胜过。

    回复 删除 垃圾
  5. 头像
    球球
    ·Android · Google Chrome
    第5楼

    世情薄,人情恶,雨送黄昏花易落。

    回复 删除 垃圾
  6. 头像
    仨上
    ·Windows 10 · Google Chrome
    第6楼

    想了很多,也不知道该如何定义你,反正你是我重来多少次都想见到的人。

    回复 删除 垃圾
  7. 头像
    1
    ·Windows 10 · Google Chrome
    第7楼

    所谓的时间,是不为人的意愿而转移的事物,最是残酷,又最是公平。

    回复 删除 垃圾