flask的send\u文件返回的文件略大于origin

2024-06-01 14:03:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Flask中编写了一个POST方法,它只返回从磁盘加载的静态文件:

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)

我按如下方式调用web服务:

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文件,但web服务返回的“副本”不是有效的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

我使用的是python2.7.12和Flask版本1.0.2。任何帮助确定问题的原因是非常感谢!你知道吗


Tags: 文件importappflaskdatarootposttemp
1条回答
网友
1楼 · 发布于 2024-06-01 14:03:45

我发现了问题:我不应该对curl使用-i选项,这会导致标头与响应主体一起保存。现在一切都好了,我换了工作

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

相关问题 更多 >