Как передать файлы «pdf» и «html» как «события» в AWS Lambda через API Gateway? - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь передать файл «pdf» или «html» непосредственно в лямбда-функцию. Но я не понимаю, в каком правильном формате это должно быть получено?

Например: Я смог понять, как передавать файлы «изображений» через лямбда-функции, используя следующий код: Но как мне отправить файл pdf или html?

def write_to_file(save_path, data):
  with open(save_path, "wb") as f:
    f.write(base64.b64decode(data))

def ocr(img):
  ocr_text = pytesseract.image_to_string(img, config = "eng")  
  return ocr_text


def lambda_handler(event, context=None):

    write_to_file("/tmp/photo.jpg", event["body"])
    im = Image.open("/tmp/photo.jpg")
    try:
      ocr_text = ocr(im)
    except Exception as e:
      print(e)

    # Return the result data in json format
    return {
      "statusCode": 200,
      "body": ocr_text

    }

Изменить: я пытаюсь передать «pdf» или «html» напрямую через шлюз API (двоичный), а не через S3.

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Спасибо. Но после массового онлайн-поиска и попытки / повторения удалось найти ответ для файла html. Аналогичная вещь должна работать и для pdf.

import json
import bs4
from bs4 import BeautifulSoup
from bs4.element import Comment
import base64

def tag_visible(element):
    if element.parent.name in ['style', 'script', 'head', 'title', 'meta','table', '[document]']:
        return False
    if isinstance(element, Comment):
        return False
    return True

def lambda_handler(event, context):
    # This will work for testing purpose only
    #soup = BeautifulSoup(event["body"], "html.parser")

    # This will work when you actually upload files
    file_upload = base64.b64decode(event["body"])
    soup = BeautifulSoup(file_upload, "html.parser")
    print(soup)
    texts = soup.findAll(text=True)
    visible_texts = filter(tag_visible, texts) 
    full_text = str(u" ".join(t.strip() for t in visible_texts))

    return {
        "statusCode": 200,
        "body": json.dumps(full_text)
    }

Дополнительно в API Gateway - вам нужно будет внести следующие 2 изменения:

  1. Добавить / в Типы двоичных носителей
  2. В разделе «Ответ метода» - добавьте «Content-Type» = «application / html»
0 голосов
/ 06 мая 2020

Вы можете использовать API-шлюз для преобразования типов содержимого.

Вы можете обратиться к этой документации

...