summary refs log tree commit diff
path: root/_posts/2019-06-24-up.md
blob: dbbc429ce1b37dd707b7b03ce2c97c74a96e8337 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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>~~    
  不打算改进了……