Maison >développement back-end >Golang >Comment implémenter un site Web de partage d'images en utilisant le langage Go et Redis

Comment implémenter un site Web de partage d'images en utilisant le langage Go et Redis

PHPz
PHPzoriginal
2023-10-27 14:18:24581parcourir

Comment implémenter un site Web de partage dimages en utilisant le langage Go et Redis

Comment mettre en œuvre un site Web de partage d'images en utilisant le langage Go et Redis

Présentation :
Dans cet article, nous verrons comment mettre en œuvre un site Web simple de partage d'images en utilisant le langage Go et Redis. Nous apprendrons comment créer un serveur Web en utilisant le langage Go, puis utiliser Redis pour stocker et récupérer les informations sur les images. Dans ce processus, nous utiliserons le modèle MVC (Model-View-Controller) pour organiser notre code et utiliserons le package HTTP de Go pour gérer les requêtes et les réponses HTTP. Dans le même temps, nous utiliserons également certaines bibliothèques Go couramment utilisées pour nous aider à traiter les fichiers image, les téléchargements de fichiers et les connexions Redis.

Étape 1 : Démarrer le serveur Go
Tout d'abord, nous devons démarrer un serveur Go pour gérer les requêtes et les réponses HTTP. Avant de faire cela, assurez-vous que la langue Go est installée sur votre ordinateur. Créez un nouveau fichier Go, nommez-le main.go et entrez le code suivant dans le fichier :

package main

import (
    "log"
    "net/http"
    "github.com/gorilla/mux"
)

func main() {
    router := mux.NewRouter()

    router.HandleFunc("/", HomeHandler).Methods("GET")
    router.HandleFunc("/upload", UploadHandler).Methods("POST")

    log.Fatal(http.ListenAndServe(":8000", router))
}

func HomeHandler(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("Welcome to our image sharing website!"))
}

func UploadHandler(w http.ResponseWriter, r *http.Request) {
    // 处理图片上传逻辑
}

Dans le code ci-dessus, nous avons utilisé le package gorilla/mux pour gérer le routage. Nous avons créé deux routes, l'une est la route de la page d'accueil et l'autre est la route qui gère les téléchargements d'images. Dans le parcours de la page d'accueil, nous renvoyons simplement un message de bienvenue. Dans le cadre de la route de téléchargement, nous utiliserons du code supplémentaire pour gérer la logique de téléchargement réelle.

Maintenant, nous pouvons exécuter ce code dans la console, puis visiter http://localhost:8000/ dans le navigateur et vous verrez un message de bienvenue.

Étape 2 : Traiter le téléchargement d'images
Ensuite, nous traiterons la logique de téléchargement d'images. Pour implémenter cette fonctionnalité, nous utiliserons le package multipart de Go pour gérer les données de formulaire avec des fichiers. Nous utiliserons également Redis pour stocker et récupérer les images téléchargées.

Tout d'abord, nous devons installer deux bibliothèques Go : go-redis et multipart. Ouvrez un terminal et exécutez la commande suivante :

go get github.com/go-redis/redis/v8
go get github.com/gorilla/mux

Une fois la bibliothèque installée, nous pouvons revenir dans notre fichier main.go et ajouter le code suivant :

import (
    // ...
    "github.com/go-redis/redis/v8"
    "io/ioutil"
    "fmt"
)

// ...

func UploadHandler(w http.ResponseWriter, r *http.Request) {
    r.ParseMultipartForm(10 << 20) // 设置最大文件大小为10MB

    file, handler, err := r.FormFile("image")
    if err != nil {
        log.Println(err)
        return
    }
    defer file.Close()

    // 读取上传的图片文件内容
    fileContent, err := ioutil.ReadAll(file)
    if err != nil {
        log.Println(err)
        return
    }

    // 将图片文件内容保存到Redis中
    rdb := redis.NewClient(&redis.Options{
        Addr:     "localhost:6379",
        Password: "", // Redis密码
        DB:       0,  // Redis数据库编号
    })

    err = rdb.Set(ctx, handler.Filename, fileContent, 0).Err()
    if err != nil {
        log.Println(err)
        return
    }

    // 返回成功上传的消息
    fmt.Fprintf(w, "Successfully uploaded %s", handler.Filename)
}

Dans le code ci-dessus, nous appelons d'abord la méthode r.ParseMultipartForm pour analyser les données du formulaire. Ensuite, nous utilisons la méthode r.FormFile pour obtenir le fichier téléchargé, le nom du fichier et le message d'erreur. Ensuite, nous utilisons la méthode ioutil.ReadFile pour lire le contenu du fichier. Enfin, nous utilisons le client Go-Redis (go-redis) pour stocker le contenu du fichier dans la base de données Redis. Après avoir configuré la connexion Redis, nous utilisons la méthode rdb.Set pour stocker le contenu du fichier, en utilisant le nom du fichier comme clé Redis. Nous pouvons également définir d'autres options, telles que le délai d'attente, etc.

Nous pouvons maintenant redémarrer notre serveur Go et télécharger l'image dans le navigateur. Une fois le téléchargement terminé, vous verrez un message de téléchargement réussi.

Étape 3 : Afficher l'image téléchargée
Maintenant, nous avons implémenté avec succès la fonction de téléchargement d'image. Ensuite, nous implémenterons une fonction pour afficher des images.

Pour y parvenir, nous allons créer un nouvel itinéraire qui récupérera et affichera l'image téléchargée. Nous lirons le contenu de l'image stocké dans Redis et le renverrons à l'utilisateur dans le cadre de la réponse HTTP.

Ajoutez le code suivant dans le fichier main.go :

func GetImageHandler(w http.ResponseWriter, r *http.Request) {
    // 获取要获取的图片的名称
    vars := mux.Vars(r)
    imageName := vars["name"]

    // 从Redis中获取图片内容
    rdb := redis.NewClient(&redis.Options{
        Addr:     "localhost:6379",
        Password: "", // Redis密码
        DB:       0,  // Redis数据库编号
    })

    imageContent, err := rdb.Get(ctx, imageName).Bytes()
    if err != nil {
        http.Error(w, "Image not found", http.StatusNotFound)
        return
    }

    // 将图片内容作为HTTP响应返回
    w.Header().Set("Content-Type", "image/jpeg")
    w.Write(imageContent)
}

func main() {
    // ...
    router.HandleFunc("/image/{name}", GetImageHandler).Methods("GET")
    // ...
}

Dans le code ci-dessus, nous obtenons d'abord le nom de l'image à récupérer à partir du paramètre URL path de la route. Ensuite, nous utilisons le client Go-Redis (go-redis) pour obtenir le contenu de l'image correspondant auprès de Redis. Enfin, nous renvoyons le contenu de l'image à l'utilisateur dans le cadre de la réponse HTTP et définissons le Content-Type sur image/jpeg.

Maintenant, nous pouvons redémarrer notre serveur Go et visiter http://localhost:8000/image/{image_name} dans le navigateur pour voir l'image téléchargée.

Conclusion
En utilisant le langage Go et Redis, nous avons réussi à mettre en œuvre un site Web simple de partage d'images. Nous avons appris à créer un serveur Web en utilisant le langage Go et à utiliser Redis pour stocker et récupérer des informations sur les images. Nous avons également appris comment gérer les téléchargements de fichiers et comment afficher les images téléchargées aux utilisateurs. Ceci n'est qu'un exemple simple, vous pouvez étendre et améliorer davantage le code pour répondre à davantage de besoins. J'espère que cet article vous aidera !

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