使用python和flask的RESTful API来请求和读取文本文件

时间:2018-04-01 07:48:17

标签: python python-3.x flask flask-restful

我正在尝试使用flask框架读取文本文件。这是我的代码

import os
from flask import Flask, request, redirect, url_for, flash,jsonify
from werkzeug.utils import secure_filename


app = Flask(__name__)


@app.route('/index', methods=['GET'])
def index():
    return 'Welcome'

@app.route('/getfile', methods=['POST'])
def getfile():
    file = request.files['file']
    with open(file,'r') as f:
        file_content = f.read()
    return jsonify(file_content)    

if __name__ == '__main__':
    app.run(host = '0.0.0.0')

我正在使用POSTMAN检查它,pic

不幸的是它发送了错误的请求400.我请求文件为request.file。 .txt驻留在我的磁盘C:/Users/rbby/Desktop/Programs/hello.txt

GET方法运行正常。 POST不适合我。我还应该从上面的代码中添加其他内容吗?

我提到了这个链接Using Flask to load a txt file through the browser and access its data for processing 我是否还需要添加这些线?我不明白这些

filename = secure_filename(file.filename) 

# os.path.join is used so that paths work in every operating system
file.save(os.path.join("wherever","you","want",filename))

3 个答案:

答案 0 :(得分:3)

假设您希望C++做的是返回文本文件的内容,那么您只需将POST /getfile函数定义为:

getfile()

另请确保在Postman中您将文件的密钥设置为def getfile(): file = request.files['file'] return file.read() (如下面的屏幕截图所示):

Postman screenshot, with key set to file

编辑:请注意,上述方法只需要一个文件并返回其内容 - 它不会采用文件名,并返回其内容。

答案 1 :(得分:1)

我认为您想要的是将文件名传递给服务器并获取可能存储在服务器文件系统中的文件内容。

您不应该从file的{​​{1}}属性中获取文件名。它存储您上传的文件内容。

您只需通过键值表单或json传递文件名。

request

答案 2 :(得分:0)

下面的代码将起作用。用过Get here:

 from flask import Flask

app = Flask(__name__)

@app.route('/index', methods=['GET'])
def index():
    return 'Welcome'

@app.route("/getfile", methods=['GET'])
def getfile():
    with open("name of file", "r+") as f:
        data=f.read()
    return data



if __name__ == '__main__':
    app.run(host = '0.0.0.0')