Maison >base de données >tutoriel mysql >Comment développer une fonction simple de téléchargement de fichiers en utilisant le langage MySQL et Go
Comment développer une fonction simple de téléchargement de fichiers à l'aide du langage MySQL et Go
Présentation :
La fonction de téléchargement de fichiers est l'une des exigences courantes de nombreuses applications Web. Cet article expliquera comment utiliser le langage MySQL et Go pour développer une fonction de téléchargement de fichiers simple et fiable. Nous utiliserons MySQL pour stocker les métadonnées liées aux fichiers, telles que le nom, le chemin et la taille du fichier, et le langage Go sera utilisé pour gérer les demandes de téléchargement de fichiers et fournir des services de téléchargement.
Étapes :
Vous pouvez utiliser l'instruction SQL suivante pour créer une table :
Fichiers CREATE TABLE (
id INT AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(255),
chemin VARCHAR(255),
taille 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, "文件上传成功") }
Voici un exemple de code pour gérer les demandes de téléchargement de fichiers :
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)) }
En résumé, nous stockons les métadonnées des fichiers via MySQL et utilisons le langage Go pour traiter les demandes de téléchargement et de téléchargement de fichiers, en implémentant une simple fonction de téléchargement de fichiers. Les exemples de code ci-dessus fournissent un cadre de base que vous pouvez modifier et étendre de manière appropriée en fonction des besoins réels. J'espère que cet article vous aidera à développer une fonction de téléchargement de fichiers !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!