flask的send_file返回的文件比原始文件大

时间:2018-10-08 21:42:03

标签: python python-2.7 web-services flask

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

function rating() {
    var data = {
        'action': 'rating'
    };

    jQuery.post(ajaxurl, data, function(response) {
        alert('Got this from the server: ' + response);
    });
}

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

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

此外,文件大小的差异具有重要的意义,因为原始文件是有效的TIFF文件,而Web服务返回的“副本”不是有效的TIFF文件:

# 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

我正在使用Python 2.7.12和Flask版本1.0.2。感谢您对确定问题原因的任何帮助!

1 个答案:

答案 0 :(得分:1)

我发现了问题:我不应该为卷曲使用-i选项,这会导致标题与响应正文一起保存。现在我已经切换到

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