MySQL と Go 言語を使用して単純なファイル ダウンロード機能を開発する方法
概要:
ファイル ダウンロード機能は、多くの Web で共通の要件の 1 つです。アプリケーション。この記事では、MySQL と Go 言語を使用して、簡単で信頼性の高いファイル ダウンロード機能を開発する方法を紹介します。 MySQL を使用してファイル名、パス、サイズなどのファイル関連のメタデータを保存し、Go 言語を使用してファイルのダウンロード要求を処理し、ダウンロード サービスを提供します。
ステップ:
次の SQL ステートメントを使用してテーブルを作成できます:
CREATE TABLE files (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
path VARCHAR(255 ),
size 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)) }
要約すると、MySQL を使用してファイルのメタデータを保存し、Go 言語を使用してファイルのアップロードおよびダウンロード要求を処理し、単純なファイルのダウンロード機能を実装します。上記のコード例は、実際のニーズに応じて適切に変更および拡張できる基本的なフレームワークを提供します。この記事がファイルのダウンロード機能の開発に役立つことを願っています。
以上がMySQLとGo言語を使った簡単なファイルダウンロード機能の開発方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。