Flask-RESTful ドキュメントで提案されているアプローチは、Api オブジェクトでサポートされている表現を宣言して、他のメディアタイプをサポートできるようにすることです。探しているメディアタイプは ですapplication/octet-stream
。
まず、表現関数を書く必要があります:
from flask import Flask, send_file, safe_join
from flask_restful import Api
app = Flask(__name__)
api = Api(app)
@api.representation('application/octet-stream')
def output_file(data, code, headers):
filepath = safe_join(data["directory"], data["filename"])
response = send_file(
filename_or_fp=filepath,
mimetype="application/octet-stream",
as_attachment=True,
attachment_filename=data["filename"]
)
return response
この表現関数が行うことはdata, code, headers
、メソッドの戻り値Response
を mimetype を持つオブジェクトに変換することですapplication/octet-stream
。ここでは、関数を使用してこのオブジェクトsend_file
を構築します。Response
私たちのGET
方法は次のようになります。
from flask_restful import Resource
class GetFile(Resource):
def get(self, filename):
return {
"directory": <Our file directory>,
"filename": filename
}
必要なコーディングはこれだけです。このリクエストを送信するときは、API が表現関数を呼び出すように、 MIME タイプをGET
に変更する必要があります。それ以外の場合は、デフォルトで JSON データが返されます。Accept
Application/octet-stream
githubxml
に例があります
この質問は7年前に尋ねられたことを知っているので、おそらく@Ayrxにとってはもう問題ではありません。立ち寄る人の役に立てば幸いです。