如何利用MySQL数据库制作一个图站 | Mayx的博客

24 June 2019 - 字数统计：2209 - 阅读大约需要8分钟 - Hits: Loading...

# 如何利用MySQL数据库制作一个图站

by mayx

这是一篇创建于 天前的文章，其中的信息可能已经有所发展或是发生改变。

AI摘要

这篇文章讲述了如何利用MySQL数据库创建一个简单的图站服务。首先，作者介绍了如何建立了一个名为`FileUP`的数据库表，用于存储文件信息如文件名、内容和大小。接着，PHP代码展示了处理文件上传、查询和下载的过程，提到了MySQL的文件大小限制（大约16MB），以及存在的断点续传问题。作者提到想通过切片上传技术来解决文件大小限制，但需前端支持，并给出了一个WebUploader的链接。文章最后提到暂时不打算改进这个方案，但可能会继续思考如何实现断点续传。

- Talk is cheap,show me the code
- 缺点
- 演示（随时GG）
- 下一步改进的打算

最近白嫖了一个500GB的数据库，想想怎么利用一下？

#
Talk is cheap,show me the code

数据库建表：

    CREATE TABLE `FileUP` (
     `ID` int(11) NOT NULL AUTO_INCREMENT,
     `Name` text NOT NULL,
     `File` longblob NOT NULL,
     `Size` int(11) NOT NULL,
     PRIMARY KEY (`ID`)
    ) ENGINE=InnoDB DEFAULT CHARSET=gb2312;

PHP代码：

    <?php
    $con=mysqli_connect("数据库地址","用户名","密码","数据库名");
    if (mysqli_connect_errno($con))
    {
        die("连接 MySQL 失败: " . mysqli_connect_error());
    }

    if ( $_GET[ID] != '' ) {
        header('Access-Control-Allow-Origin: *');
        $sql = "SELECT * FROM `FileUP` WHERE `ID` = '".addslashes($_GET[ID])."' ";
        $result = $con->query($sql);
        if ($result->num_rows > 0) {
            while($row = $result->fetch_assoc()){
             Header ( "Content-type: application/octet-stream" );
             Header ( "Accept-Ranges: bytes" );
             Header ( "Accept-Length: " . $row["Size"] );
             Header ( "Content-Disposition: attachment; filename=" . $row["Name"] );
            echo $row["File"];
        }
    }
        else {
     header('HTTP/1.1 404 NOT FOUND');
    }
    } else {
    echo '<title>Mayx图床</title>
    <h1>Mayx图床</h1><hr>
    请选择需要上传的文件
    <form enctype="multipart/form-data" method="post" action="">
      <input type="file" name="File" />
      <input type="submit" name="submit" value="submit" />
    </form>
    <br />';
    if ( $_SERVER['REQUEST_METHOD'] == "POST" ) {
     $error = $_FILES['File']['error'];
     $tmp_name = $_FILES['File']['tmp_name'];
     $size = $_FILES['File']['size'];
     $name = $_FILES['File']['name'];
     print("\n");
     if ($error == UPLOAD_ERR_OK && $size > 0) {
      $fp = fopen($tmp_name, 'r');
      $content = fread($fp, $size);
      fclose($fp);
      $content = addslashes($content);
      $sql = "INSERT INTO `FileUP` (`Name`, `File`, `Size`)
     VALUES ('".$name."', '".$content."', '".$size."');";
      $con->query($sql);
      $sql = "select @@identity;";
      $result = $con->query($sql);
    while($row = $result->fetch_assoc()) {
    echo '上传完成，文件下载地址：<a href="//'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."?ID=".$row['@@identity'].'" >'.$_SERVER['HTTP_X_FORWARDED_PROTO'].'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."?ID=".$row['@@identity'].'</a>';
    }

     } else {
      echo "文件上传错误！";
     }

    }

    echo '<hr />
    <center><a href="https://mabbs.github.io/">By Mayx</a></center>';

    }

    mysqli_close($con);

#
缺点

MySQL保存文件有限制，好像只能存16MB左右😓（改max_allowed_packet就可以了）

另外就是断点续传的问题，这个问题我回头再想一想吧。

#
演示（随时GG）

https://mayx.leanapp.cn/up.php

#
下一步改进的打算

想搞成切片上传，这样就没有文件大小上传的限制了。

不过这个好像得前端支持，先放个链接在这里吧：https://github.com/fex-team/webuploader

不打算改进了……

tags: MySQL - 数据库 - 图站 - PHP 查看原始文件

#### 推荐文章

Loading...

上一篇：如何自己写一个博客计数器
下一篇：重建MaBBS的计划
想问这篇文章
召唤伊斯特瓦尔