В Django Rest Framework я хотел бы опубликовать файл, полученный как InMemoryUploadedFile
, на другой сервер, как только он будет получен.
Звучит просто, но функция request.post()
, похоже, неправильно отправляет такой файл:
def post(self, request, *args, **kwargs):
data = request.data
print(data)
# <QueryDict: {'file': [<InMemoryUploadedFile: myfile.pdf (application/pdf)>]}>
endpoint = OTHER_API_URL + "/endpoint"
r = requests.post(endpoint, files=data)
Мой другой сервер получает запрос (через колбу) с именем файла, но не с содержимым:
@app.route("/endpoint", methods=["POST"])
def endpoint():
if flask.request.method == "POST":
# I removed the many checks to simplify the code
file = flask.request.files['file']
path = os.path.join(UPLOAD_FOLDER, file.filename)
file.save(path)
print(file) #<FileStorage: u'file.pdf' (None)>
print(os.path.getsize(path)) #0
return [{"response":"ok"}]
При публикации файла непосредственно в этот API в форме данных с почтальоном, он работает как положено:
print(file) # <FileStorage: u'file.pdf' ('application/pdf')>
print(os.path.getsize(path)) #8541
Любая помощь в том, как это исправить, то есть преобразовать тип InMemoryUploadedFile
во что-то, что может понять обычный API REST? Или, может быть, просто добавление правильных заголовков?