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
1.2 Perpustakaan tanggungan
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 }
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")
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)
}
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")
}
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!