mirror of https://github.com/Mabbs/mabbs.github.io
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
3.0 KiB
100 lines
3.0 KiB
--- |
|
layout: post |
|
title: 如何利用MySQL数据库制作一个图站 |
|
tags: [MySQL, 数据库, 图站, PHP] |
|
--- |
|
|
|
最近白嫖了一个500GB的数据库,想想怎么利用一下?<!--more--> |
|
|
|
# Talk is cheap,show me the code |
|
|
|
数据库建表: |
|
```sql |
|
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 |
|
<?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>~~ |
|
不打算改进了……
|
|
|