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
|
||||
}
|
129
main.go
129
main.go
@ -1,18 +1,60 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"Pixel/database"
|
||||
"crypto/md5"
|
||||
"fmt"
|
||||
"html/template"
|
||||
"io"
|
||||
"log"
|
||||
"math/rand"
|
||||
"net/http"
|
||||
"os"
|
||||
"path"
|
||||
"strconv"
|
||||
"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() {
|
||||
|
||||
http.HandleFunc("/upload", upload) //设置访问的路由
|
||||
@ -25,30 +67,67 @@ func main() {
|
||||
|
||||
// 处理/upload 逻辑
|
||||
func upload(w http.ResponseWriter, r *http.Request) {
|
||||
fmt.Println("method:", r.Method) //获取请求的方法
|
||||
if r.Method == "GET" { //前端页面渲染
|
||||
crutime := time.Now().Unix()
|
||||
h := md5.New()
|
||||
io.WriteString(h, strconv.FormatInt(crutime, 10))
|
||||
token := fmt.Sprintf("%x", h.Sum(nil))
|
||||
fmt.Println("method:", r.Method) // 获取请求的方法
|
||||
|
||||
t, _ := template.ParseFiles("Web/upload.html")
|
||||
t.Execute(w, token)
|
||||
} else { //后端POST接收逻辑
|
||||
r.ParseMultipartForm(32 << 20)
|
||||
file, handler, err := r.FormFile("file")
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
defer file.Close()
|
||||
fmt.Fprintf(w, "%v", handler.Header)
|
||||
f, err := os.OpenFile("./test/"+handler.Filename, os.O_WRONLY|os.O_CREATE, 0666) // 此处假设当前目录下已存在test目录
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
defer f.Close()
|
||||
io.Copy(f, file)
|
||||
}
|
||||
if r.Method == "GET" { // 前端页面渲染
|
||||
crutime := time.Now().Unix()
|
||||
h := md5.New()
|
||||
io.WriteString(h, strconv.FormatInt(crutime, 10))
|
||||
token := fmt.Sprintf("%x", h.Sum(nil))
|
||||
|
||||
t, _ := template.ParseFiles("Web/upload.html")
|
||||
t.Execute(w, token)
|
||||
} else { // 后端POST接收逻辑
|
||||
r.ParseMultipartForm(32 << 20)
|
||||
file, handler, err := r.FormFile("file")
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
// 生成文件的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 {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
// 将文件内容拷贝到新文件
|
||||
_, err = file.Seek(0, 0)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
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