집 >데이터 베이스 >MySQL 튜토리얼 >MySQL과 Go 언어를 사용하여 간단한 파일 다운로드 기능을 개발하는 방법
MySQL 및 Go 언어를 사용하여 간단한 파일 다운로드 기능을 개발하는 방법
개요:
파일 다운로드 기능은 많은 웹 애플리케이션의 일반적인 요구 사항 중 하나입니다. 이 기사에서는 MySQL 및 Go 언어를 사용하여 간단하고 안정적인 파일 다운로드 기능을 개발하는 방법을 소개합니다. MySQL을 사용하여 파일 이름, 경로, 크기 등 파일 관련 메타데이터를 저장하고 Go 언어를 사용하여 파일 다운로드 요청을 처리하고 다운로드 서비스를 제공합니다.
단계:
다음 SQL 문을 사용하여 테이블을 만들 수 있습니다.
CREATE TABLE 파일(
ID INT AUTO_INCREMENT PRIMARY KEY,
이름 VARCHAR(255),
경로 VARCHAR(255),
크기 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!