github.com/machinebox/remoto@v0.1.2-0.20191024144331-eff21a7d321f/examples/files/server/main.go (about) 1 package main 2 3 import ( 4 "bytes" 5 "context" 6 "fmt" 7 "image/jpeg" 8 "os" 9 10 "github.com/disintegration/imaging" 11 "github.com/machinebox/remoto/examples/files/server/files" 12 "github.com/machinebox/remoto/remototypes" 13 "github.com/pkg/errors" 14 ) 15 16 func main() { 17 if err := run(); err != nil { 18 fmt.Fprintf(os.Stderr, "%v\n", err) 19 os.Exit(1) 20 } 21 } 22 23 func run() error { 24 addr := "0.0.0.0:8080" 25 fmt.Println("listening on", addr) 26 err := files.Run(addr, service{}) 27 if err != nil { 28 return err 29 } 30 return nil 31 } 32 33 type service struct{} 34 35 func (service) Flip(ctx context.Context, req *files.FlipRequest) (*remototypes.FileResponse, error) { 36 f, err := req.Image.Open(ctx) 37 if err != nil { 38 return nil, err 39 } 40 defer f.Close() 41 img, err := imaging.Decode(f) 42 if err != nil { 43 return nil, err 44 } 45 rotated := imaging.Rotate180(img) 46 var buf bytes.Buffer 47 if err := jpeg.Encode(&buf, rotated, &jpeg.Options{Quality: 100}); err != nil { 48 return nil, errors.Wrap(err, "encode jpeg") 49 } 50 resp := &remototypes.FileResponse{ 51 Filename: "flipped.jpg", 52 Data: &buf, 53 ContentLength: buf.Len(), 54 ContentType: "image/jpeg", 55 } 56 return resp, nil 57 }