1

falcon フレームワークをバックエンドとして使用して、pdf ファイルを受信しようとしています。私はバックエンドの初心者で、何が起こっているのか理解しようとしています。要約すると、2つのクラスがあります。そのうちの 1 人は、働いている私の友人です。

これはバックエンド側のコードです:

#this is my code
class VehiclePolicyResource(object):
    def on_post(self, req, resp, reg):
        local_path = create_local_path(req.url, req.content_type)
        with open(local_path, 'wb') as temp_file:
            body = req.stream.read()
            temp_file.write(body)
#this is my friend code
class VehicleOdometerResource(object):
    def on_post(self, req, resp, reg):
        local_path = create_local_path(req.url, req.content_type)
        with open(local_path, 'wb') as temp_file:
            body = req.stream.read()
            temp_file.write(body)

まったく同じで、同じ答えが得られなかったので、これを実行してルートを追加します api.add_route('/v1/files/{reg}/policies',VehicleResourcesV1.VehiclePolicyResource())

ターミナルでこのコマンドを使用する HTTP POST localhost:5000/v1/files/SJQ52883Y/policies@/Users/alfreddatui/Autoarmour/aa-atlas/static/asd.pdf と、ファイルを取得しようとします。しかし、サポートされていないメディアタイプと言い続けます。画像を受け取る他のコードは、文字通り上記と同じコードですが、機能します。

何か案が ?

4

2 に答える 2

3

Falcon は、 を使用したリクエストをすぐにサポートしていますContent-Type: application/json

その他のコンテンツ タイプについては、リクエストにメディア ハンドラを提供する必要があります。

のリクエストのハンドラーを実装する試みを次に示しますContent-Type: application/pdf

import cStringIO
import mimetypes
import uuid
import os

import falcon
from falcon import media
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument

class Document(object):
    def __init__(self, document):
        self.document = document
    # implement media methods here

class PDFHandler(media.BaseHandler):
    def serialize(self, media):
        return media._parser.fp.getvalue()

    def deserialize(self, raw):
        fp = cStringIO.StringIO()
        fp.write(raw)
        try:
            return Document(
                PDFDocument(
                    PDFParser(fp)
                )
            )
        except ValueError as err:
            raise errors.HTTPBadRequest(
                'Invalid PDF',
                'Could not parse PDF body - {0}'.format(err)
            )

をサポートするようにメディア ハンドラを更新しますContent-Type: application/pdf

extra_handlers = {
    'application/pdf': PDFHandler(),
}

app = falcon.API()
app.req_options.media_handlers.update(extra_handlers)
app.resp_options.media_handlers.update(extra_handlers)
于 2017-09-11T09:04:58.390 に答える