lambda.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package main
  2. import (
  3. "context"
  4. "encoding/base64"
  5. "encoding/json"
  6. "strings"
  7. "github.com/aws/aws-lambda-go/lambda"
  8. )
  9. type lambdaHandler struct{}
  10. type labdaResponse struct {
  11. IsBase64Encoded bool `json:"'isBase64Encoded'"`
  12. StatusCode int `json:"statusCode"`
  13. Headers map[string]string `json:"headers"`
  14. Body string `json:"body"`
  15. }
  16. func (s lambdaHandler) Invoke(ctx context.Context, payload []byte) ([]byte, error) {
  17. ctx = timerWithSince(ctx)
  18. ctx, err := parsePath(ctx, strings.TrimSpace(string(payload)), &processingHeaders{})
  19. if err != nil {
  20. return []byte{}, err
  21. }
  22. ctx, downloadcancel, err := downloadImage(ctx)
  23. defer downloadcancel()
  24. if err != nil {
  25. return []byte{}, err
  26. }
  27. checkTimeout(ctx)
  28. data, err := processImage(ctx)
  29. if err != nil {
  30. return []byte{}, err
  31. }
  32. po := getProcessingOptions(ctx)
  33. resp := labdaResponse{
  34. IsBase64Encoded: true,
  35. StatusCode: 200,
  36. Headers: map[string]string{"Content-Type": mimes[po.Format]},
  37. Body: base64.StdEncoding.EncodeToString(data),
  38. }
  39. jsonData, err := json.Marshal(resp)
  40. if err != nil {
  41. return []byte{}, err
  42. }
  43. return jsonData, nil
  44. }
  45. func startLambdaServer() {
  46. lambda.StartHandler(new(lambdaHandler))
  47. }