Pembinaan cakera rangkaian Golang

PHPz
Lepaskan: 2023-05-15 10:59:37
asal
847 orang telah melayarinya

Dengan perkembangan Internet, permintaan untuk cakera rangkaian semakin meningkat Walau bagaimanapun, produk cakera rangkaian di pasaran sering diadu tentang kebocoran privasi dan isu-isu lain Oleh itu, membina cakera rangkaian anda sendiri telah menjadi trend . Artikel ini akan memperkenalkan cara menggunakan golang untuk membina cakera rangkaian mudah.

1. Persediaan persekitaran

Menggunakan golang untuk membina cakera rangkaian memerlukan keupayaan pengaturcaraan tertentu dan penyediaan persekitaran berikut:

1.1 Alat yang diperlukan

  • go >= 1.8
  • godep
  • git

1.2 Perpustakaan tanggungan

  • golang.org/x/crypto: In sebagai tambahan kepada pakej penyulitan terbina dalam bahasa Go, ia menyediakan sokongan algoritma penyulitan yang lebih selamat, termasuk SHA256/384/512, RC4, DES, AES, dsb.
  • github.com/gin-gonic/gin: Rangka kerja HTTP berprestasi tinggi yang boleh digunakan untuk menulis aplikasi web ringkas dengan cepat, serta aplikasi yang lebih kompleks.
  • github.com/go-xorm/core: Rangka kerja ORM ringan untuk operasi CRUD pada pangkalan data.
  • github.com/go-xorm/xorm: Versi yang dipertingkatkan berdasarkan pakej teras, yang menyediakan penjanaan SQL yang dipermudahkan, transaksi, caching dan akses kepada berbilang sumber data, dsb., sesuai untuk akses data dalam projek semua lapisan saiz.

2. Seni bina projek

Hujung belakang cakera rangkaian ialah sistem pengurusan fail yang membaca fail ke dalam memori dan menyediakan perkhidmatan akses melalui pelayan HTTP / Halaman CSS/JS membolehkan interaktiviti. Semasa proses pembangunan, kami mengikuti corak reka bentuk MVC dengan ketat dan memisahkan tiga peringkat Model, Paparan dan Pengawal.

2.1 Lapisan model

Lapisan Model bertanggungjawab terutamanya untuk akses data, mengekstrak data daripada storan data asas, dan kemudian memberikannya kepada lapisan Pengawal untuk pemprosesan perniagaan. Dalam sistem kami, operasi CURD dilakukan terutamanya pada fail. Kami menggunakan rangka kerja ORM xorm untuk mengabstrak data asas dan menyediakan API yang lebih mudah dan jelas.

Model data ditakrifkan menggunakan struktur bahasa Go, seperti berikut:

type User struct {
    Id int64
    Username string `xorm:"unique"`
    Password string
}
Salin selepas log masuk

2.2 Lapisan Lihat

Lapisan Paparan sepadan dengan lapisan Persembahan dalam aplikasi Web dan terutamanya bertanggungjawab untuk menukar lapisan kawalan Data yang dikembalikan akan diberikan kepada antara muka program, dan data permintaan yang dihantar oleh antara muka akan dihantar ke lapisan kawalan untuk diproses. Dalam sistem kami, lapisan Paparan bertanggungjawab terutamanya untuk mengendalikan dok halaman hujung hadapan.

Kami menggunakan rangka kerja Gin untuk menulis kod lapisan Lihat. Pertama, kita perlu menyediakan pengurusan penghalaan Apabila kita memasukkan URL tertentu, fungsi pemprosesan yang sepadan akan dipanggil secara automatik untuk diproses. Dalam rangka kerja Gin, ini sangat mudah untuk dilaksanakan:

router := gin.Default()
router.GET("/files", handlers.ListFiles)
router.PUT("/files/:name", handlers.AddFile)
router.POST("/files/:name", handlers.UpdateFile)
router.DELETE("/files/:name", handlers.DeleteFile)
router.Run(":8020")
Salin selepas log masuk

2.3 Lapisan Pengawal

Lapisan Pengawal bertanggungjawab untuk memproses permintaan, mendapatkan data ke lapisan Lihat dan akhirnya mengembalikan hasil pemprosesan . Dalam sistem kami, lapisan Pengawal bertanggungjawab terutamanya untuk memproses logik perniagaan.

Semasa pemprosesan, kita mesti terlebih dahulu menentukan sama ada pengguna telah log masuk. Jika tidak, lompat ke halaman log masuk, jika tidak, lompat ke senarai fail. Begitu juga, apabila pengguna meminta fail, kita perlu menyemak dahulu sama ada fail itu wujud Jika ia tidak wujud, kembalikan halaman ralat 404.

3. Operasi fail

3.1 Muat naik fail

Sebelum memuat naik fail, kami mesti melakukan pemeriksaan jenis pada fail terlebih dahulu. Untuk mengelakkan jenis fail daripada diganggu dengan menganalisis paket HTTP, kami mengesyorkan anda melakukan pemeriksaan jenis pada bahagian hadapan. Kami menggunakan objek FileReader JavaScript untuk membaca fail yang dimuat naik dan menyekat permintaan AJAX.

Apabila pengguna memilih untuk memuat naik fail, kami akan mula membaca fail secara tidak segerak Selepas bacaan selesai, fail akan dimuat naik ke pelayan dalam mod binari. Selepas muat naik berjaya, maklumat fail disimpan dalam pangkalan data untuk pengurusan mudah.

3.2 Muat Turun Fail

Apabila meminta untuk memuat turun fail, kami menggunakan perkhidmatan HTTP untuk memulangkan terus fail tersebut kepada penyemak imbas dalam bentuk strim. Pada masa yang sama, kami menggunakan fungsi http.ServeContent untuk memindahkan fail dan memastikan pemindahan fail adalah betul dan boleh dikawal sepenuhnya.

func (h Pengendali) Muat TurunFail(c gin.Konteks) {

fileName := c.Param("name")
filePath := h.filePath(fileName)
if _, err := os.Stat(filePath); os.IsNotExist(err) {
    c.String(http.StatusNotFound, "file not exist")
    return
}
c.Writer.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename=%s", fileName))
c.Writer.Header().Add("Content-Type", getContentType(fileName))
http.ServeFile(c.Writer, c.Request, filePath)
Salin selepas log masuk

}

3.3 Pemadaman Fail

Pemadaman Fail Ia adalah operasi yang agak mudah. Pertama, kita perlu menyemak sama ada fail itu wujud dan mengembalikan mesej ralat jika ia tidak wujud. Kemudian kita perlu memadam maklumat fail dari pangkalan data dan akhirnya memadam fail dari cakera.

func (h Pengendali) DeleteFail(c gin.Context) {

fileName := c.Param("name")
filePath := h.filePath(fileName)
if _, err := os.Stat(filePath); os.IsNotExist(err) {
    c.String(http.StatusNotFound, "file not exist")
    return
}
session := h.engine.NewSession()
defer session.Close()
if err := session.Begin(); err != nil {
    log.Printf("begin transaction failed: %s", err.Error())
    c.String(http.StatusInternalServerError, err.Error())
    return

}
if _, err := session.Delete(&File{FileName: fileName}); err != nil {
    session.Rollback()
    c.String(http.StatusInternalServerError, err.Error())
    return
}
if err := session.Commit(); err != nil {
    c.String(http.StatusInternalServerError, err.Error())
    return
}
if err := os.Remove(filePath); err != nil {
    c.String(http.StatusInternalServerError, err.Error())
    return
}
c.Header("Access-Control-Allow-Origin", "*")

c.String(http.StatusOK, "file delete success")
Salin selepas log masuk

}

4 Untuk meningkatkan keselamatan sistem cakera rangkaian, kita harus mematuhi dasar keselamatan berikut dengan ketat semasa proses pembangunan:

4.1 Kawalan Kebenaran

Hanya pengguna yang dibenarkan sahaja dibenarkan menggunakan pelbagai fungsi sistem, dan pengguna lain tidak boleh mengakses dan mengubah suai data.

4.2 Penyulitan Data

Semua maklumat sensitif harus disulitkan untuk mengelakkan insiden keselamatan seperti kecurian dan pengubahan maklumat semasa penghantaran dan penyimpanan.

4.3 Mencegah Serangan Rangkaian

Sistem perlu menggunakan langkah pencegahan yang berkesan untuk mengelakkan serangan daripada rangkaian, termasuk tetapi tidak terhad kepada tembok api, perisian anti-virus, dsb.

5

Melalui artikel ini, kami mempelajari cara menggunakan golang untuk membina sistem cakera rangkaian yang mudah. Semasa proses pembangunan, kami mengikut ketat corak reka bentuk MVC dan modul yang dipisahkan untuk meningkatkan kualiti dan kebolehselenggaraan. Di samping itu, kami telah mempertimbangkan keselamatan sistem dengan ketat, mengelakkan beberapa isu keselamatan biasa, dan meningkatkan kebolehpercayaan dan keselamatan sistem cakera rangkaian. Kami percaya bahawa bagi mereka yang baru memulakan pengaturcaraan dalam golang, artikel ini dapat membantu mereka memahami dengan lebih baik senario aplikasi golang dan segera memulakan pembangunan projek.

Atas ialah kandungan terperinci Pembinaan cakera rangkaian Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!