我在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。任何帮助确定问题的原因是非常感谢!你知道吗
我发现了问题:我不应该对curl使用
-i
选项,这会导致标头与响应主体一起保存。现在一切都好了,我换了工作相关问题 更多 >
编程相关推荐