Cara membangunkan fungsi muat turun fail ringkas menggunakan MySQL dan bahasa Go
Gambaran Keseluruhan:
Fungsi muat turun fail ialah salah satu keperluan biasa bagi banyak aplikasi web. Artikel ini akan memperkenalkan cara menggunakan bahasa MySQL dan Go untuk membangunkan fungsi muat turun fail yang mudah dan boleh dipercayai. Kami akan menggunakan MySQL untuk menyimpan metadata berkaitan fail, seperti nama fail, laluan dan saiz, dan bahasa Go akan digunakan untuk mengendalikan permintaan muat turun fail dan menyediakan perkhidmatan muat turun.
Langkah:
Anda boleh menggunakan pernyataan SQL berikut untuk mencipta jadual:
CIPTA fail JADUAL (
id INT AUTO_INCREMENT PRIMARY KEY,
nama VARCHAR(255),
laluan VARCHAR(255),
saiz INT
func uploadHandler(w http.ResponseWriter, r *http.Request) { file, handler, err := r.FormFile("file") if err != nil { // 处理错误 http.Error(w, err.Error(), http.StatusInternalServerError) return } defer file.Close() // 保存文件到服务器 path := "/path/to/save/files/" + handler.Filename f, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE, 0666) if err != nil { // 处理错误 http.Error(w, err.Error(), http.StatusInternalServerError) return } defer f.Close() io.Copy(f, file) // 将文件元数据插入数据库 size := handler.Size name := handler.Filename insertSQL := "INSERT INTO files (name, path, size) VALUES (?, ?, ?)" _, err = db.Exec(insertSQL, name, path, size) if err != nil { // 处理错误 http.Error(w, err.Error(), http.StatusInternalServerError) return } fmt.Fprintf(w, "文件上传成功") }
func downloadHandler(w http.ResponseWriter, r *http.Request) { id := r.URL.Query().Get("id") // 根据文件id查询文件元数据 querySQL := "SELECT name, path, size FROM files WHERE id = ?" var name, path string var size int64 err := db.QueryRow(querySQL, id).Scan(&name, &path, &size) if err != nil { // 处理错误 http.Error(w, err.Error(), http.StatusInternalServerError) return } // 打开文件 file, err := os.Open(path) if err != nil { // 处理错误 http.Error(w, err.Error(), http.StatusInternalServerError) return } defer file.Close() // 设置响应头 w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=%s", name)) w.Header().Set("Content-Type", "application/octet-stream") w.Header().Set("Content-Length", fmt.Sprintf("%d", size)) // 发送文件数据给用户 io.Copy(w, file) }
func main() { // 连接MySQL数据库 db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/database") if err != nil { log.Fatal(err) } defer db.Close() // 注册路由处理函数 http.HandleFunc("/upload", uploadHandler) http.HandleFunc("/download", downloadHandler) // 启动HTTP服务器 log.Fatal(http.ListenAndServe(":8080", nil)) }
Atas ialah kandungan terperinci Bagaimana untuk membangunkan fungsi muat turun fail mudah menggunakan bahasa MySQL dan Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!