


Ketahui fungsi pengendalian fail dalam bahasa Go dan laksanakan fungsi penyulitan, pemampatan, muat naik dan muat turun fail
Ketahui fungsi pengendalian fail dalam bahasa Go dan laksanakan fungsi penyulitan, pemampatan, muat naik dan muat turun fail
Bahasa Go ialah bahasa pengaturcaraan taip statik sumber terbuka Ia popular secara meluas dalam bidang pembangunan untuk prestasi cekap dan sintaksnya yang ringkas . Pustaka standard bahasa Go menyediakan banyak fungsi operasi fail, menjadikannya sangat mudah untuk membaca dan menulis fail, menyulitkan dan memampatkannya, memuat naik dan memuat turunnya. Artikel ini akan memperkenalkan cara menggunakan fungsi operasi fail dalam bahasa Go untuk melaksanakan fungsi menyulitkan, memampatkan, memuat naik dan memuat turun fail.
Pertama, kita perlu mengimport perpustakaan pihak ketiga yang berkaitan. Dalam bahasa Go, anda boleh menggunakan pustaka archive/zip
untuk merealisasikan pemampatan fail, pustaka crypto/aes
untuk merealisasikan penyulitan dan penyahsulitan fail, dan io/ ioutil
Perpustakaan untuk melaksanakan operasi membaca dan menulis fail. Kita boleh menggunakan alat pengurusan pakej bahasa Go go get
untuk mendapatkan perpustakaan ini: archive/zip
库来实现文件的压缩,使用crypto/aes
库来实现文件的加密解密,使用io/ioutil
库来实现文件的读写操作。我们可以使用Go语言的包管理工具go get
来获取这些库:
go get -u github.com/golang/example/hello/archive/zip go get -u github.com/golang/example/hello/crypto/aes go get -u github.com/golang/example/hello/io/ioutil
下面我们来编写代码,实现文件的加密压缩功能:
package main import ( "archive/zip" "crypto/aes" "crypto/cipher" "io/ioutil" "os" ) func main() { // 读取原始文件 file, _ := os.Open("original.txt") defer file.Close() data, _ := ioutil.ReadAll(file) // 使用AES加密算法对文件进行加密 key := []byte("thisisaeskey12345") block, _ := aes.NewCipher(key) ciphertext := make([]byte, len(data)) block.Encrypt(ciphertext, data) // 创建压缩文件 zipfile, _ := os.Create("encrypted.zip") defer zipfile.Close() zipWriter := zip.NewWriter(zipfile) // 将加密后的文件写入压缩文件 zipfiledata, _ := zipWriter.Create("encrypted.txt") zipfiledata.Write(ciphertext) // 关闭压缩文件 zipWriter.Close() // 读取压缩文件 zipfile, _ = os.Open("encrypted.zip") defer zipfile.Close() zipReader, _ := zip.NewReader(zipfile, int64(len(ciphertext))) // 解压缩文件 unzipdata, _ := zipReader.File[0].Open() defer unzipdata.Close() unzipdatacontent, _ := ioutil.ReadAll(unzipdata) // 使用AES解密算法对文件进行解密 decrypter := cipher.NewCFBDecrypter(block, block.iv) plainText := make([]byte, len(unzipdatacontent)) decrypter.XORKeyStream(plainText, unzipdatacontent) // 输出解密后的文件内容 ioutil.WriteFile("decrypted.txt", plainText, 0644) }
上述代码中,我们首先读取了一个名为original.txt
的原始文件,并将其内容存储在data
变量中。然后,我们使用AES加密算法对文件进行加密,并将加密后的数据存储在ciphertext
中。
接下来,我们创建了一个名为encrypted.zip
的压缩文件,并将加密后的文件内容写入其中。然后,我们使用archive/zip
库读取了压缩文件中的内容,并解压缩至unzipdatacontent
变量中。
最后,我们使用AES解密算法对解压缩后的数据进行解密,并将解密后的内容写入一个名为decrypted.txt
的文件中。
通过上述步骤,我们实现了对文件进行加密压缩的功能。
接下来,我们将实现文件的上传和下载功能。为了实现这一功能,我们可以使用net/http
库和os
库。
package main import ( "io" "net/http" "os" ) func uploadFile(w http.ResponseWriter, r *http.Request) { r.ParseMultipartForm(32 << 20) // 设置最大上传文件大小为32MB file, handler, err := r.FormFile("file") if err != nil { w.WriteHeader(http.StatusBadRequest) return } defer file.Close() f, err := os.OpenFile(handler.Filename, os.O_WRONLY|os.O_CREATE, 0666) if err != nil { w.WriteHeader(http.StatusInternalServerError) return } defer f.Close() io.Copy(f, file) w.WriteHeader(http.StatusOK) } func downloadFile(w http.ResponseWriter, r *http.Request) { fileName := r.URL.Query().Get("file") if fileName == "" { w.WriteHeader(http.StatusBadRequest) return } file, err := os.Open(fileName) if err != nil { w.WriteHeader(http.StatusInternalServerError) return } defer file.Close() fi, err := file.Stat() if err != nil { w.WriteHeader(http.StatusInternalServerError) return } w.Header().Set("Content-Disposition", "attachment; filename="+fileName) w.Header().Set("Content-Type", "application/octet-stream") w.Header().Set("Content-Length", strconv.FormatInt(fi.Size(), 10)) io.Copy(w, file) } func main() { http.HandleFunc("/upload", uploadFile) http.HandleFunc("/download", downloadFile) http.ListenAndServe(":8080", nil) }
上述代码中,我们首先实现了一个uploadFile
函数,用于处理文件的上传功能。在该函数中,我们通过r.FormFile
方法获取上传的文件,并将其保存至服务器本地文件系统中。
然后,我们实现了一个downloadFile
函数,用于处理文件的下载功能。在该函数中,我们通过os.Open
方法打开指定的文件,并将其通过io.Copy
方法写入到ResponseWriter
中,以便于客户端下载。
最后,我们通过调用http.HandleFunc
方法来指定处理上传和下载的路由,然后使用http.ListenAndServe
rrreee
rrreee
Dalam kod di atas, kita mula-mula membaca Cipta fail asal bernamaoriginal.txt
dan simpan kandungannya dalam pembolehubah data
. Kami kemudiannya menyulitkan fail menggunakan algoritma penyulitan AES dan menyimpan data yang disulitkan dalam ciphertext
. 🎜🎜Seterusnya, kami mencipta fail termampat bernama encrypted.zip
dan menulis kandungan fail yang disulitkan ke dalamnya. Kemudian, kami menggunakan pustaka archive/zip
untuk membaca kandungan fail yang dimampatkan dan menyahmampatnya ke dalam pembolehubah unzipdatacontent
. 🎜🎜Akhir sekali, kami menggunakan algoritma penyahsulitan AES untuk menyahsulit data yang dinyahmampat dan menulis kandungan yang dinyahsulit ke dalam fail bernama decrypted.txt
. 🎜🎜Melalui langkah di atas, kami telah melaksanakan fungsi penyulitan dan pemampatan fail. 🎜🎜Seterusnya, kami akan melaksanakan fungsi muat naik dan muat turun fail. Untuk mencapai fungsi ini, kita boleh menggunakan pustaka net/http
dan pustaka os
. 🎜rrreee🎜Dalam kod di atas, kami mula-mula melaksanakan fungsi uploadFile
untuk mengendalikan fungsi muat naik fail. Dalam fungsi ini, kami memperoleh fail yang dimuat naik melalui kaedah r.FormFile
dan menyimpannya ke sistem fail setempat pelayan. 🎜🎜Kemudian, kami melaksanakan fungsi muat turunFail
untuk mengendalikan fungsi muat turun fail. Dalam fungsi ini, kami membuka fail yang ditentukan melalui kaedah os.Open
dan menulisnya ke ResponseWriter
melalui kaedah io.Copy
, untuk memudahkan muat turun klien. 🎜🎜Akhir sekali, kami menentukan laluan untuk memproses muat naik dan muat turun dengan memanggil kaedah http.HandleFunc
dan kemudian gunakan http.ListenAndServe
untuk memulakan pelayan setempat dan mendengar pada port 8080. 🎜🎜Melalui kod di atas, kami menyedari fungsi penyulitan, pemampatan, muat naik dan muat turun fail. Anda boleh menggantikan nama fail dan kunci sendiri untuk ujian. Saya harap artikel ini akan membantu anda dalam mempelajari fungsi pengendalian fail dalam bahasa Go. 🎜Atas ialah kandungan terperinci Ketahui fungsi pengendalian fail dalam bahasa Go dan laksanakan fungsi penyulitan, pemampatan, muat naik dan muat turun fail. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Perpustakaan yang digunakan untuk operasi nombor terapung dalam bahasa Go memperkenalkan cara memastikan ketepatannya ...

Masalah Threading Giliran di GO Crawler Colly meneroka masalah menggunakan Perpustakaan Colly Crawler dalam bahasa Go, pemaju sering menghadapi masalah dengan benang dan permintaan beratur. � ...

Dua cara untuk menentukan struktur dalam bahasa Go: perbezaan antara VAR dan jenis kata kunci. Apabila menentukan struktur, pergi bahasa sering melihat dua cara menulis yang berbeza: pertama ...

Perpustakaan mana yang dibangunkan oleh syarikat besar atau projek sumber terbuka yang terkenal? Semasa pengaturcaraan di GO, pemaju sering menghadapi beberapa keperluan biasa, ...

Perbezaan antara percetakan rentetan dalam bahasa Go: perbezaan kesan menggunakan fungsi println dan rentetan () sedang ...

Masalah menggunakan redisstream untuk melaksanakan beratur mesej dalam bahasa Go menggunakan bahasa Go dan redis ...

Apa yang perlu saya lakukan jika label struktur tersuai di Goland tidak dipaparkan? Apabila menggunakan Goland untuk Pembangunan Bahasa GO, banyak pemaju akan menghadapi tag struktur tersuai ...

GO Pointer Syntax dan menangani masalah dalam penggunaan perpustakaan Viper semasa pengaturcaraan dalam bahasa Go, adalah penting untuk memahami sintaks dan penggunaan petunjuk, terutama dalam ...
