diff options
author | mayx | 2022-01-04 20:42:55 +0800 |
---|---|---|
committer | mayx | 2022-01-04 20:42:55 +0800 |
commit | f4aa957c53cda659d026ffd23856f65a72fee739 (patch) | |
tree | afc51b78e1ff241c955ca30910e895e02e0a1d22 /_posts/2019-06-24-up.md |
Restore deleted repositories
Diffstat (limited to '_posts/2019-06-24-up.md')
-rw-r--r-- | _posts/2019-06-24-up.md | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/_posts/2019-06-24-up.md b/_posts/2019-06-24-up.md new file mode 100644 index 0000000..dbbc429 --- /dev/null +++ b/_posts/2019-06-24-up.md @@ -0,0 +1,100 @@ +--- +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>~~ + 不打算改进了…… |