flask接收客户端的get请求,读取本地文件并将文件返回给客户端 ,可用于文件下载功能

1、创建一个get_file.py的python文件,内容如下所示:

# -*- coding: utf-8 -*-
from flask import Flask, render_template, send_file, send_from_directory,json, jsonify,make_response

app = Flask(__name__)  #实例化flask app

#file_name是客户端传来的需要下载的文件名
@app.route('/get_file/<file_name>', methods=['GET'])
def get_file(file_name):
    directory = config.APP_PATH
    try:
        response = make_response(
            send_from_directory(directory, file_name, as_attachment=True))
        return response
    except Exception as e:
        return jsonify({"code": "异常", "message": "{}".format(e)})

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

2、执行get_file.py文件,当服务启动后,在浏览器地址输入http://localhost:80/get_file/filename访问,就可以下载文件了。

 

 

  • 9
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: 好的,我会尽力为您解答。首先,让我们来看一下如何用Flask接收Android客户端通过OkHttp传递的三个参数: ```python from flask import Flask, request, jsonify import mysql.connector app = Flask(__name__) @app.route('/query', methods=['POST']) def query(): data = request.json param1 = data['param1'] param2 = data['param2'] param3 = data['param3'] conn = mysql.connector.connect(user='username', password='password', host='localhost', database='database_name') cursor = conn.cursor() query = """ SELECT column_name FROM table_name WHERE param1=%s AND param2=%s AND param3=%s """ cursor.execute(query, (param1, param2, param3)) result = cursor.fetchall() cursor.close() conn.close() return jsonify(result) ``` 在这个例子中,我们定义了一个名为`'query'`的API接口,接口的请求方式为POST。通过`request.json`方法获取到Android客户端通过OkHttp传递的三个参数,然后使用`mysql.connector`连接MySQL数据库进行查询。查询结束后,将查询结果使用`jsonify`方法转换为JSON格式并将其返回给Android客户端。 然后是客户端如何接收这个list,您可以在Android客户端中采用如下方式: ```java private OkHttpClient client = new OkHttpClient(); public void run() throws Exception { String url = "http://localhost:5000/query"; String json = "{\"param1\":\"value1\",\"param2\":\"value2\",\"param3\":\"value3\"}"; RequestBody body = RequestBody.create(JSON, json); Request request = new Request.Builder() .url(url) .post(body) .build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { e.printStackTrace(); } @Override public void onResponse(Call call, Response response) throws IOException { String responseData = response.body().string(); try { JSONArray jsonArray = new JSONArray(responseData); List<String> resultList = new ArrayList<>(); for (int i = 0; i < jsonArray.length(); i++) { String item = jsonArray.getString(i); resultList.add(item); } // 在这里使用resultList // ... } catch (JSONException e) { e.printStackTrace(); } } }); } ``` 在这个例子中,我们使用OkHttp向Flask API发送POST请求,并将三个参数封装进JSON格式的字符串中。在请求成功后,我们从响应结果中读取JSON格式的数组,使用循环迭代将其转换为Java中的List对象,并在这个List中进行具体的处理。需要注意的是,这里我们使用了JSON库org.json来将响应结果转换为Java对象,您需要在项目中引入这个库。 ### 回答2: 服务器端如何用flask接收这些参数,并查询mysql得到一个查询结果,返回客户端一个list: 1. 首先,在Flask中导入必要的库和模块: ```python from flask import Flask, request, jsonify import pymysql ``` 2. 创建一个Flask应用程序: ```python app = Flask(__name__) ``` 3. 定义一个路由,用于接收客户端的请求和参数,并连接MySQL数据库进行查询,并将结果返回客户端: ```python @app.route('/query', methods=['POST']) def query_data(): # 获取客户端传递的参数 param1 = request.form['param1'] param2 = request.form['param2'] param3 = request.form['param3'] # 连接MySQL数据库 conn = pymysql.connect(host='localhost', port=3306, user='username',passwd='password', db='database') cursor = conn.cursor() # 构造查询语句 query = "SELECT * FROM table WHERE column1 = %s AND column2 = %s AND column3 = %s" cursor.execute(query, (param1, param2, param3)) # 获取查询结果 result = cursor.fetchall() # 关闭数据库连接 cursor.close() conn.close() # 将查询结果转换为list result_list = [] for row in result: result_list.append(list(row)) # 将结果返回客户端 return jsonify(result_list) ``` 4. 运行Flask应用程序: ```python if __name__ == '__main__': app.run() ``` 客户端如何接收这个list: 1. 首先,需要在Android客户端中使用OkHttp发送POST请求,并将参数以表单形式传递给服务器: ```java OkHttpClient client = new OkHttpClient(); FormBody formBody = new FormBody.Builder() .add("param1", "value1") .add("param2", "value2") .add("param3", "value3") .build(); Request request = new Request.Builder() .url("http://server_address/query") .post(formBody) .build(); try { Response response = client.newCall(request).execute(); if (response.isSuccessful()) { String responseJson = response.body().toString(); // 在这里解析responseJson,得到查询结果list } } catch (IOException e) { e.printStackTrace(); } ``` 2. 在上述代码中,通过OkHttp发送POST请求,指定服务器地址为"http://server_address/query",并将参数以表单形式添加到请求中。 3. 服务器返回的数据通过response.body().toString()获取,可以使用JSON解析库解析得到list。 需要注意的是,以上代码仅为示例,需根据具体的需求和环境进行适当的修改。 ### 回答3: Android客户端使用OkHttp库传递三个参数给服务器,服务器端使用Flask接收这些参数,并通过查询MySQL得到一个查询结果,再返回一个列表给客户端。以下是详细代码: 客户端代码(Android): ```java import okhttp3.*; public class Main { public static void main(String[] args) { OkHttpClient client = new OkHttpClient(); // 构建请求体 RequestBody requestBody = new FormBody.Builder() .add("param1", "value1") .add("param2", "value2") .add("param3", "value3") .build(); // 构建请求 Request request = new Request.Builder() .url("http://example.com/api") .post(requestBody) .build(); // 发送请求 try (Response response = client.newCall(request).execute()) { if (response.isSuccessful()) { String result = response.body().string(); // 解析返回的列表数据 // TODO: 处理返回的结果 } } catch (Exception e) { e.printStackTrace(); } } } ``` 服务器端代码(Python Flask): ```python from flask import Flask, request, jsonify import mysql.connector app = Flask(__name__) # 处理POST请求 @app.route('/api', methods=['POST']) def handle_post_request(): # 获取客户端传递的参数 param1 = request.form.get('param1') param2 = request.form.get('param2') param3 = request.form.get('param3') # 连接MySQL数据库 conn = mysql.connector.connect(user='username', password='password', host='localhost', database='database_name') cursor = conn.cursor() # 执行查询操作 sql = "SELECT * FROM table_name WHERE param1 = %s AND param2 = %s AND param3 = %s" cursor.execute(sql, (param1, param2, param3)) # 获取查询结果并构建返回列表 result = [] for row in cursor.fetchall(): result.append(list(row)) # 关闭数据库连接 cursor.close() conn.close() # 返回查询结果给客户端 return jsonify(result) if __name__ == '__main__': app.run() ``` 以上是一个简单的示例,客户端通过OkHttp库将参数发送给Flask服务器端,服务器端接收参数后通过查询MySQL数据库得到结果,并将结果以JSON格式返回客户端客户端接收到JSON数据后可以通过解析JSON数据进行处理。请注意替换代码中的数据库连接信息、SQL语句、表名等为实际的值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值