Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk membangunkan fungsi muat turun fail mudah menggunakan bahasa MySQL dan Go

Bagaimana untuk membangunkan fungsi muat turun fail mudah menggunakan bahasa MySQL dan Go

PHPz
PHPzasal
2023-09-20 10:21:181416semak imbas

Bagaimana untuk membangunkan fungsi muat turun fail mudah menggunakan bahasa MySQL dan Go

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:

  1. Reka Bentuk Pangkalan Data
    Pertama, kita perlu mereka bentuk pangkalan data untuk menyimpan metadata fail. Kita boleh mencipta jadual bernama "fail" dengan medan berikut:
  2. id: pengecam unik fail, anda boleh menggunakan integer meningkat sendiri atau UUID sebagai kunci utama.
  3. nama: nama fail, disimpan menggunakan jenis VARCHAR atau TEXT.
  4. path: Laluan storan fail, disimpan dalam jenis VARCHAR atau TEXT.
  5. saiz: saiz fail, disimpan menggunakan jenis integer.

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

); Muat naik fail
    Dalam aplikasi web, pengguna boleh memuat naik fail ke pelayan melalui borang muat naik fail. Di sini kami menggunakan pustaka net/http bahasa Go untuk mengendalikan permintaan muat naik fail. Berikut ialah contoh kod untuk mengendalikan permintaan muat naik fail:

  1. 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, "文件上传成功")
    }
Muat Turun Fail
    Kini, kami boleh melaksanakan fungsi muat turun fail. Pengguna memuat turun fail dengan menghantar permintaan GET Kami perlu mencari maklumat berkaitan fail berdasarkan id fail dan menghantar kandungan fail kepada pengguna.

  1. Berikut ialah contoh kod yang mengendalikan permintaan muat turun fail:
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)
}

Mulakan pelayan web
    Akhir sekali, kita perlu menulis fungsi utama yang mudah untuk memulakan pelayan web dan mendengar permintaan muat naik dan muat turun fail.

  1. 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))
    }
  2. Ringkasnya, kami menyimpan metadata fail melalui MySQL dan menggunakan bahasa Go untuk memproses permintaan muat naik dan muat turun fail, melaksanakan fungsi muat turun fail yang mudah. Contoh kod di atas menyediakan rangka kerja asas yang boleh anda ubah suai dan lanjutkan dengan sewajarnya mengikut keperluan sebenar. Saya harap artikel ini akan membantu anda membangunkan fungsi muat turun fail!

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn