Maison  >  Article  >  base de données  >  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 en utilisant le langage MySQL et Go

PHPz
PHPzoriginal
2023-09-20 10:21:181415parcourir

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 :

  1. Conception de base de données
    Tout d'abord, nous devons concevoir une base de données pour stocker les métadonnées du fichier. On peut créer une table nommée "files" avec les champs suivants :
  2. id : l'identifiant unique du fichier, vous pouvez utiliser un entier auto-croissant ou UUID comme clé primaire.
  3. name : nom du fichier, stocké en utilisant le type VARCHAR ou TEXT.
  4. path : Chemin de stockage du fichier, stocké de type VARCHAR ou TEXT.
  5. size : taille du fichier, stockée en type entier.

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
);

  1. Téléchargement de fichiers
    Dans une application Web, les utilisateurs peuvent télécharger des fichiers sur le serveur via le formulaire de téléchargement de fichiers. Ici, nous utilisons la bibliothèque net/http du langage Go pour gérer les demandes de téléchargement de fichiers. Voici l'exemple de code pour gérer la demande de téléchargement de fichier :
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, "文件上传成功")
}
  1. Téléchargement de fichiers
    Maintenant, nous pouvons implémenter la fonctionnalité de téléchargement de fichiers. L'utilisateur télécharge le fichier en envoyant une requête GET. Nous devons trouver les informations pertinentes du fichier en fonction de l'ID du fichier et envoyer le contenu du fichier à l'utilisateur.

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)
}
  1. Démarrer le serveur Web
    Enfin, nous devons écrire une fonction principale simple pour démarrer le serveur Web et écouter les demandes de téléchargement et de téléchargement de fichiers.
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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn