mirror of
https://github.com/Kakune55/Pixel.git
synced 2025-05-06 18:29:25 +08:00
完成数据库初始化创建文件功能
This commit is contained in:
parent
379822dca4
commit
42c764f825
84
database/db.go
Normal file
84
database/db.go
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
package database
|
||||||
|
|
||||||
|
import (
|
||||||
|
"database/sql"
|
||||||
|
"log"
|
||||||
|
|
||||||
|
_ "github.com/mattn/go-sqlite3"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Initdb() {
|
||||||
|
db, err := sql.Open("sqlite3", "./data/database.db")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
defer db.Close()
|
||||||
|
|
||||||
|
// 创建表的SQL语句
|
||||||
|
createTableSQL := `
|
||||||
|
CREATE TABLE IF NOT EXISTS mytable (
|
||||||
|
link TEXT PRIMARY KEY,
|
||||||
|
md5 TEXT NOT NULL
|
||||||
|
);
|
||||||
|
`
|
||||||
|
|
||||||
|
_, err = db.Exec(createTableSQL)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewFile(linkID string, md5 string) {
|
||||||
|
db, err := sql.Open("sqlite3", "./data/database.db")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
defer db.Close()
|
||||||
|
|
||||||
|
// SQL语句
|
||||||
|
SQL := `
|
||||||
|
INSERT INTO "main"."mytable" ("link", "md5") VALUES (?, ?)
|
||||||
|
`
|
||||||
|
|
||||||
|
stmt, err := db.Prepare(SQL)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = stmt.Exec(linkID,md5) //插入记录
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetFileInfo(linkID string) string {
|
||||||
|
db, err := sql.Open("sqlite3", "./data/database.db")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
defer db.Close()
|
||||||
|
|
||||||
|
// SQL语句
|
||||||
|
SQL := `
|
||||||
|
SELECT * FROM "mytable" WHERE link = ?
|
||||||
|
`
|
||||||
|
|
||||||
|
row := db.QueryRow(SQL,linkID)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 扫描查询结果
|
||||||
|
var md5 string
|
||||||
|
var linkIDx string
|
||||||
|
err = row.Scan(&linkIDx,&md5)
|
||||||
|
if err != nil {
|
||||||
|
if err == sql.ErrNoRows {
|
||||||
|
return ""
|
||||||
|
} else {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return md5
|
||||||
|
}
|
89
main.go
89
main.go
@ -1,18 +1,60 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"Pixel/database"
|
||||||
"crypto/md5"
|
"crypto/md5"
|
||||||
"fmt"
|
"fmt"
|
||||||
"html/template"
|
"html/template"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
"log"
|
||||||
|
"math/rand"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
"path"
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
const appinfo string = `
|
||||||
|
|
||||||
|
______ ________ ______ __ __ __
|
||||||
|
/_____/\ /_______/\ /_____/\ /__/\ /__/\ /_/\
|
||||||
|
\:::_ \ \ \__.::._\/ \::::_\/_ \ \::\\:.\ \ \:\ \
|
||||||
|
\:(_) \ \ \::\ \ \:\/___/\ \_\::_\:_\/ \:\ \
|
||||||
|
\: ___\/ _\::\ \__ \::___\/_ _\/__\_\_/\ \:\ \____
|
||||||
|
\ \ \ /__\::\__/\ \:\____/\ \ \ \ \::\ \ \:\/___/\
|
||||||
|
\_\/ \________\/ \_____\/ \_\/ \__\/ \_____\/
|
||||||
|
|
||||||
|
|
||||||
|
`
|
||||||
|
fmt.Println(appinfo)
|
||||||
|
|
||||||
|
database.Initdb() //初始化数据库
|
||||||
|
dirPath := "./data/img"
|
||||||
|
|
||||||
|
// 使用 os.Stat 检查目录是否存在
|
||||||
|
_, err := os.Stat(dirPath)
|
||||||
|
|
||||||
|
if os.IsNotExist(err) {
|
||||||
|
// 目录不存在,可以调用 os.Mkdir 创建
|
||||||
|
err := os.Mkdir(dirPath, 0755)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("无法创建目录:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fmt.Println("目录创建成功:", dirPath)
|
||||||
|
} else if err == nil {
|
||||||
|
// 目录已存在
|
||||||
|
fmt.Println("目录已存在:", dirPath)
|
||||||
|
} else {
|
||||||
|
// 发生其他错误
|
||||||
|
fmt.Println("发生错误:", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
http.HandleFunc("/upload", upload) //设置访问的路由
|
http.HandleFunc("/upload", upload) //设置访问的路由
|
||||||
@ -25,8 +67,9 @@ func main() {
|
|||||||
|
|
||||||
// 处理/upload 逻辑
|
// 处理/upload 逻辑
|
||||||
func upload(w http.ResponseWriter, r *http.Request) {
|
func upload(w http.ResponseWriter, r *http.Request) {
|
||||||
fmt.Println("method:", r.Method) //获取请求的方法
|
fmt.Println("method:", r.Method) // 获取请求的方法
|
||||||
if r.Method == "GET" { //前端页面渲染
|
|
||||||
|
if r.Method == "GET" { // 前端页面渲染
|
||||||
crutime := time.Now().Unix()
|
crutime := time.Now().Unix()
|
||||||
h := md5.New()
|
h := md5.New()
|
||||||
io.WriteString(h, strconv.FormatInt(crutime, 10))
|
io.WriteString(h, strconv.FormatInt(crutime, 10))
|
||||||
@ -34,7 +77,7 @@ func upload(w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
t, _ := template.ParseFiles("Web/upload.html")
|
t, _ := template.ParseFiles("Web/upload.html")
|
||||||
t.Execute(w, token)
|
t.Execute(w, token)
|
||||||
} else { //后端POST接收逻辑
|
} else { // 后端POST接收逻辑
|
||||||
r.ParseMultipartForm(32 << 20)
|
r.ParseMultipartForm(32 << 20)
|
||||||
file, handler, err := r.FormFile("file")
|
file, handler, err := r.FormFile("file")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -42,13 +85,49 @@ func upload(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer file.Close()
|
defer file.Close()
|
||||||
fmt.Fprintf(w, "%v", handler.Header)
|
|
||||||
f, err := os.OpenFile("./test/"+handler.Filename, os.O_WRONLY|os.O_CREATE, 0666) // 此处假设当前目录下已存在test目录
|
// 生成文件的MD5哈希
|
||||||
|
h := md5.New()
|
||||||
|
if _, err := io.Copy(h, file); err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
md5sum := fmt.Sprintf("%x", h.Sum(nil))
|
||||||
|
|
||||||
|
// 获取文件扩展名
|
||||||
|
fname := handler.Filename
|
||||||
|
ext := path.Ext(fname)
|
||||||
|
|
||||||
|
// 创建新文件,使用MD5哈希和原始扩展名
|
||||||
|
newFilename := md5sum + ext
|
||||||
|
f, err := os.OpenFile("./data/img/"+newFilename, os.O_WRONLY|os.O_CREATE, 0666)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
|
|
||||||
|
// 将文件内容拷贝到新文件
|
||||||
|
_, err = file.Seek(0, 0)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
io.Copy(f, file)
|
io.Copy(f, file)
|
||||||
|
|
||||||
|
// 存入数据库
|
||||||
|
database.NewFile(RandomString(10),md5sum)
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func RandomString(n int) string {
|
||||||
|
const letters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
|
||||||
|
bytes := make([]byte, n)
|
||||||
|
rand.Seed(time.Now().UnixNano())
|
||||||
|
for i := 0; i < n; i++ {
|
||||||
|
bytes[i] = letters[rand.Intn(len(letters))]
|
||||||
|
}
|
||||||
|
return string(bytes)
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user