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.

101 lines
3.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
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>~~
不打算改进了……