Maison  >  Article  >  développement back-end  >  Apprenez les fonctions d'exploitation des fichiers en langage Go et implémentez les fonctions de cryptage, de compression, de téléchargement et de téléchargement des fichiers.

Apprenez les fonctions d'exploitation des fichiers en langage Go et implémentez les fonctions de cryptage, de compression, de téléchargement et de téléchargement des fichiers.

WBOY
WBOYoriginal
2023-07-29 22:37:091667parcourir

Apprenez les fonctions d'exploitation des fichiers dans le langage Go et implémentez les fonctions de cryptage, de compression, de téléchargement et de téléchargement des fichiers

Le langage Go est un langage de programmation open source à typage statique. Il est très populaire dans le domaine du développement pour ses performances efficaces et sa syntaxe concise. . La bibliothèque standard du langage Go offre une multitude de fonctions d'exploitation de fichiers, ce qui rend très simple la lecture et l'écriture de fichiers, leur chiffrement et leur compression, leur chargement et leur téléchargement. Cet article expliquera comment utiliser les fonctions d'exploitation de fichiers dans le langage Go pour implémenter les fonctions de cryptage, de compression, de téléchargement et de téléchargement de fichiers.

Tout d’abord, nous devons importer les bibliothèques tierces pertinentes. En langage Go, vous pouvez utiliser la bibliothèque archive/zip pour réaliser la compression de fichiers, la bibliothèque crypto/aes pour réaliser le cryptage et le déchiffrement de fichiers, et le io/ ioutil Bibliothèque pour implémenter les opérations de lecture et d'écriture de fichiers. Nous pouvons utiliser l'outil de gestion des packages de langage Go go get pour obtenir ces bibliothèques : 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.ListenAndServerrreee

Écrivons du code pour implémenter la fonction de cryptage et de compression de fichiers :

rrreee

Dans le code ci-dessus, nous lisons d'abord Créer un fichier original nommé original.txt et stockez son contenu dans la variable data. Nous chiffrons ensuite le fichier à l'aide de l'algorithme de chiffrement AES et stockons les données chiffrées dans ciphertext. 🎜🎜Ensuite, nous créons un fichier compressé nommé encrypted.zip et y écrivons le contenu du fichier crypté. Ensuite, nous avons utilisé la bibliothèque archive/zip pour lire le contenu du fichier compressé et l'avons décompressé dans la variable unzipdatacontent. 🎜🎜Enfin, nous utilisons l'algorithme de décryptage AES pour décrypter les données décompressées et écrire le contenu décrypté dans un fichier nommé decrypted.txt. 🎜🎜Grâce aux étapes ci-dessus, nous avons implémenté la fonction de cryptage et de compression des fichiers. 🎜🎜Ensuite, nous implémenterons les fonctions de téléchargement et de téléchargement de fichiers. Afin de réaliser cette fonction, nous pouvons utiliser la bibliothèque net/http et la bibliothèque os. 🎜rrreee🎜Dans le code ci-dessus, nous avons d'abord implémenté une fonction uploadFile pour gérer la fonction de téléchargement de fichiers. Dans cette fonction, nous obtenons le fichier téléchargé via la méthode r.FormFile et l'enregistrons dans le système de fichiers local du serveur. 🎜🎜Ensuite, nous avons implémenté une fonction downloadFile pour gérer la fonction de téléchargement de fichiers. Dans cette fonction, nous ouvrons le fichier spécifié via la méthode os.Open et l'écrivons dans ResponseWriter via la méthode io.Copy, pour faciliter téléchargement client. 🎜🎜Enfin, nous spécifions l'itinéraire de traitement des téléchargements et des téléchargements en appelant la méthode http.HandleFunc, puis utilisons http.ListenAndServe pour démarrer un serveur local et écouter sur le port 8080. 🎜🎜Grâce au code ci-dessus, nous réalisons les fonctions de cryptage, de compression, de téléchargement et de téléchargement des fichiers. Vous pouvez remplacer le nom du fichier et la clé vous-même pour les tests. J'espère que cet article vous sera utile pour apprendre les fonctions d'opération de fichiers en langage Go. 🎜

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