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  }