Rumah >pembangunan bahagian belakang >Golang >Cara melaksanakan laman web perkongsian gambar menggunakan bahasa Go dan Redis

Cara melaksanakan laman web perkongsian gambar menggunakan bahasa Go dan Redis

PHPz
PHPzasal
2023-10-27 14:18:24584semak imbas

Cara melaksanakan laman web perkongsian gambar menggunakan bahasa Go dan Redis

Cara melaksanakan laman web perkongsian gambar menggunakan bahasa Go dan Redis

Ikhtisar:
Dalam artikel ini, kita akan membincangkan cara melaksanakan laman web perkongsian gambar yang mudah menggunakan bahasa Go dan Redis. Kami akan belajar cara membuat pelayan web menggunakan bahasa Go dan kemudian menggunakan Redis untuk menyimpan dan mendapatkan maklumat imej. Dalam proses ini, kami akan menggunakan corak MVC (Model-View-Controller) untuk menyusun kod kami dan menggunakan pakej HTTP Go untuk mengendalikan permintaan dan respons HTTP. Pada masa yang sama, kami juga akan menggunakan beberapa perpustakaan Go yang biasa digunakan untuk membantu kami memproses fail imej, muat naik fail dan sambungan Redis.

Langkah 1: Mulakan Pelayan Go
Pertama, kita perlu memulakan pelayan Go untuk mengendalikan permintaan dan respons HTTP. Sebelum melakukan ini, sila pastikan anda memasang bahasa Go pada komputer anda. Cipta fail Go baharu, namakannya main.go dan masukkan kod berikut di dalam fail:

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) {
    // 处理图片上传逻辑
}

Dalam kod di atas, kami menggunakan pakej gorila/mux untuk mengendalikan penghalaan. Kami mencipta dua laluan, satu laluan halaman utama dan satu lagi laluan yang mengendalikan muat naik imej. Dalam laluan halaman utama, kami hanya mengembalikan mesej alu-aluan. Dalam laluan muat naik, kami akan menggunakan kod tambahan untuk mengendalikan logik muat naik sebenar.

Kini kita boleh menjalankan kod ini dalam konsol dan kemudian lawati http://localhost:8000/ dalam penyemak imbas dan anda akan melihat mesej alu-aluan.

Langkah 2: Proses muat naik imej
Seterusnya, kami akan memproses logik muat naik imej. Untuk melaksanakan fungsi ini, kami akan menggunakan pakej berbilang bahagian Go untuk mengendalikan data borang dengan fail. Kami juga akan menggunakan Redis untuk menyimpan dan mendapatkan semula imej yang dimuat naik.

Pertama, kita perlu memasang dua perpustakaan Go: go-redis dan multipart. Buka terminal dan jalankan arahan berikut:

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

Setelah perpustakaan dipasang, kami boleh kembali ke fail main.go kami dan tambah kod berikut:

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)
}

Dalam kod di atas, kami mula-mula memanggil kaedah r.ParseMultipartForm untuk menghuraikan data borang. Kemudian, kami menggunakan kaedah r.FormFile untuk mendapatkan fail yang dimuat naik, nama fail dan mesej ralat. Seterusnya, kami menggunakan kaedah ioutil.ReadFile untuk membaca kandungan fail. Akhir sekali, kami menggunakan klien Go-Redis (go-redis) untuk menyimpan kandungan fail ke dalam pangkalan data Redis. Selepas menyediakan sambungan Redis, kami menggunakan kaedah rdb.Set untuk menyimpan kandungan fail, menggunakan nama fail sebagai kunci Redis. Kami juga boleh menetapkan pilihan lain, seperti tamat masa, dsb.

Kini kami boleh memulakan semula pelayan Go kami dan memuat naik imej dalam penyemak imbas. Selepas muat naik selesai, anda akan melihat mesej muat naik yang berjaya.

Langkah 3: Paparkan imej yang dimuat naik
Kini, kami telah berjaya melaksanakan fungsi muat naik imej. Seterusnya, kami akan melaksanakan fungsi untuk melihat gambar.

Untuk mencapai matlamat ini, kami akan mencipta laluan baharu yang akan mengambil dan memaparkan imej yang dimuat naik. Kami akan membaca kandungan imej yang disimpan dalam Redis dan mengembalikannya kepada pengguna sebagai sebahagian daripada respons HTTP.

Tambah kod berikut dalam fail 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")
    // ...
}

Dalam kod di atas, kami mula-mula mendapat nama imej untuk diambil daripada parameter laluan URL laluan. Kemudian, kami menggunakan klien Go-Redis (go-redis) untuk mendapatkan kandungan imej yang sepadan daripada Redis. Akhir sekali, kami mengembalikan kandungan imej kepada pengguna sebagai sebahagian daripada respons HTTP dan menetapkan Jenis Kandungan kepada imej/jpeg.

Kini, kami boleh memulakan semula pelayan Go kami dan melawati http://localhost:8000/image/{image_name} dalam penyemak imbas untuk melihat imej yang dimuat naik.

Kesimpulan
Dengan menggunakan bahasa Go dan Redis, kami berjaya melaksanakan laman web perkongsian gambar yang mudah. Kami belajar cara membuat pelayan web menggunakan bahasa Go dan menggunakan Redis untuk menyimpan dan mendapatkan maklumat imej. Kami juga mempelajari cara mengendalikan muat naik fail dan cara memaparkan imej yang dimuat naik kepada pengguna. Ini hanyalah contoh mudah, anda boleh melanjutkan dan menambah baik kod untuk memenuhi lebih banyak keperluan. Harap artikel ini membantu anda!

Atas ialah kandungan terperinci Cara melaksanakan laman web perkongsian gambar menggunakan bahasa Go dan Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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