FastAPI FileResponse не может найти файл в TempDirectoryPython

Программы на Python
Ответить
Anonymous
 FastAPI FileResponse не может найти файл в TempDirectory

Сообщение Anonymous »

Я пытаюсь написать конечную точку, которая просто принимает изображение и пытается преобразовать его в другой формат, запуская команду в системе. Затем я возвращаю преобразованный файл. Это медленно и очень просто, и мне не нужно хранить файлы нигде, кроме как временно.
Я бы хотел, чтобы все операции записи файлов происходили во временном каталоге, поэтому он очищается.
Маршрут работает нормально, если выходной файл нет во временном каталоге. Но если я попытаюсь поместить выходной файл во временный каталог, FileResponse не сможет его найти, и запросы не будут выполнены.

Код: Выделить всё

RuntimeError: File at path /tmp/tmpp5x_p4n9/out.jpg does not exist.
Происходит ли что-то, связанное с асинхронной природой FastApi, что FileResponse не может дождаться, пока подпроцесс создаст файл, который он создает? Могу ли я заставить это подождать? (удаление async из маршрута не помогает).

Код: Выделить всё

@app.post("/heic")
async def heic(img: UploadFile):
with TemporaryDirectory() as dir:
inname = os.path.join(dir, "img.heic")
f = open(inname,"wb")
f.write(img.file.read())
f.flush()

# setting outname in the temp dir fails!
# outname = os.path.join(dir, 'out.jpg')

outname = os.path.join('out.jpg')

cmd = f"oiiotool {f.name} -o {outname}"
process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
process.wait()
return FileResponse(outname, headers={'Content-Disposition':'attachment; filename=response.csv'})

Спасибо за любую информацию!

Подробнее здесь: https://stackoverflow.com/questions/725 ... pdirectory
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»