Файл, возвращаемый send_file фляги, немного больше исходного - PullRequest
0 голосов
/ 09 октября 2018

Я написал метод POST во Flask, который просто возвращает статический файл, загруженный с диска:

from PIL import Image
from flask import Flask, send_file

app = Flask(__name__)

@app.route('/score', methods=['POST'])
def score():
    return send_file('/data/temp.tif')

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=5000)

Я вызываю веб-службу следующим образом:

curl -X POST http://0.0.0.0:5000/score -i --output /data/temp2.tif

Яс удивлением обнаружил, что возвращаемый мне файл не совпадает с размером исходного файла:

# ls -al /data/*.tif
-rwxrwxrwx 1 root root 331030 Oct  8 21:23 /data/temp.tif
-rwxrwxrwx 1 root root 331338 Oct  8 21:33 /data/temp2.tif

Кроме того, разница в размере файла имеет важные последствия, поскольку, хотя оригинал является допустимым файлом TIFF, «копия»"возвращено веб-сервисом не является допустимым файлом TIFF:

>>> import tifffile
>>> tifffile.imread('/data/temp.tif').shape
(158, 238, 2)
>>> tifffile.imread('/data/temp2.tif')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/tifffile/tifffile.py", line 444, in imread
    with TiffFile(files, **kwargs_file) as tif:
  File "/usr/local/lib/python2.7/dist-packages/tifffile/tifffile.py", line 1754, in __init__
    raise ValueError('not a TIFF file')
ValueError: not a TIFF file

Я использую Python 2.7.12 и Flask версии 1.0.2.Будем благодарны за любую помощь в определении причины проблемы!

1 Ответ

0 голосов
/ 09 октября 2018

Я обнаружил проблему: я не должен был использовать опцию -i для curl, которая заставляла сохранять заголовки вместе с телом ответа.Все хорошо, теперь, когда я перешел на

curl -X POST http://0.0.0.0:5000/score --output /data/temp2.tif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...