summary refs log tree commit diff
path: root/_posts/2019-06-24-up.md
diff options
context:
space:
mode:
authormayx2022-01-04 20:42:55 +0800
committermayx2022-01-04 20:42:55 +0800
commitf4aa957c53cda659d026ffd23856f65a72fee739 (patch)
treeafc51b78e1ff241c955ca30910e895e02e0a1d22 /_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.md100
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>~~    
+  不打算改进了……