In my back-end golang web server I have converted and processed a directory of images that i have read in using os.ReadDir
These images are stored as a [][]byte
. I want to be able to send these images through a GET request to be displayed in the browser using Javascript.
I am having trouble figuring out how to begin the process to send the data from the Golang web server. The resources I am currently using are the typical net/http package, and Gorilla Mux/Websockets.
Here is some sample code that shows how I am currently doing a get request which return some json. How can I similarly send a [][]byte array instead of rendering a template or JSON?
import (
"html/template"
"log"
"net/http"
"encoding/json"
"github.com/gorilla/mux"
)
func ViewSample(rw http.ResponseWriter, req *http.Request) {
type Sample struct {
Id int `json:"id"`
Name string `json:"name"`
User string `json:"user
}
params := mux.Vars(req)
sampleId := params["id"]
sample := Sample{
Id: 3,
Name: "test",
User: "testuser"
}
json.NewEncoder(rw).Encode(sample)
}
If your image is stored in a []byte
, you can write that directly to the http.ResponseWriter
func GetImage(w http.ResponseWriter, r *http.Request) {
image, err := getImage() // getImage example returns ([]byte, error)
if err != {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
w.Write(image)
}
There's no way to send multiple images in a single response which is natively understood by clients. One method you could use is to return a json document on the first call, which contains a list of links to fetch each image individually.