httpgzip - examples_test.go
1 package httpgzip_test
2
3 import (
4 "archive/zip"
5 "bytes"
6 "compress/gzip"
7 "fmt"
8 "io"
9 "net/http"
10 "net/http/httptest"
11 "os"
12
13 "vimagination.zapto.org/httpgzip"
14 )
15
16 func Example() {
17 // Prepare example filesystems
18
19 var fs, gfs bytes.Buffer
20
21 zw := zip.NewWriter(&fs)
22 f, _ := zw.Create("file.html")
23
24 io.WriteString(f, "<HTML>")
25 zw.Close()
26
27 zw = zip.NewWriter(&gfs)
28 f, _ = zw.Create("file.html.gz")
29
30 gf := gzip.NewWriter(f)
31
32 io.WriteString(gf, "<HEAD>")
33
34 gf.Close()
35 zw.Close()
36
37 zfs, _ := zip.NewReader(bytes.NewReader(fs.Bytes()), int64(fs.Len()))
38 zgfs, _ := zip.NewReader(bytes.NewReader(gfs.Bytes()), int64(gfs.Len()))
39
40 // Example
41
42 handler := httpgzip.FileServer(http.FS(zfs), http.FS(zgfs))
43
44 w := httptest.NewRecorder()
45 r, _ := http.NewRequest(http.MethodGet, "/file.html", nil)
46 r.Header.Set("Accept-encoding", "identity")
47
48 handler.ServeHTTP(w, r)
49
50 fmt.Println("Uncompressed:", w.Body)
51
52 r.Header.Set("Accept-encoding", "gzip")
53
54 w = httptest.NewRecorder()
55
56 handler.ServeHTTP(w, r)
57
58 gr, _ := gzip.NewReader(w.Body)
59
60 fmt.Print("Compressed: ")
61 io.Copy(os.Stdout, gr)
62
63 // Output:
64 // Uncompressed: <HTML>
65 // Compressed: <HEAD>
66 }
67