Dify知识库下载小程序_dify知识库文件下载
一、Dify配置
1.查看或创建知识库的API

二、下载程序配置
1. 安装依赖resquirements.txt
######requirements.txt#####flask==2.3.3psycopg2-binary==2.9.9requests==2.31.0python-dotenv==1.0.0#####安装依赖pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
2. 主程序代码app.py
##app.pyfrom flask import Flask, render_template, jsonify, Responseimport requestsimport osfrom dotenv import load_dotenvimport ioimport zipfileimport urllib.parsefrom config import API_KEY, BASE_URLapp = Flask(__name__)@app.route(\'/\')def index(): return render_template(\'index.html\')@app.route(\'/api/datasets\')def get_datasets(): headers = { \'Authorization\': f\'Bearer {API_KEY}\', \'Content-Type\': \'application/json\' } response = requests.get( f\'{BASE_URL}/v1/datasets?page=1&limit=20\', headers=headers ) if response.status_code == 200: data = response.json() datasets = [{\'id\': item[\'id\'], \'name\': item[\'name\']} for item in data.get(\'data\', [])] return jsonify(datasets) return jsonify({\'error\': \'获取知识库列表失败\'}), response.status_code@app.route(\'/api/files/\')def get_files(dataset_id): headers = { \'Authorization\': f\'Bearer {API_KEY}\', \'Content-Type\': \'application/json\' } response = requests.get( f\'{BASE_URL}/v1/datasets/{dataset_id}/documents\', headers=headers ) if response.status_code == 200: data = response.json() files = [] for item in data.get(\'data\', []): file_id = item[\'id\'] file_name = item.get(\'data_source_detail_dict\', {}).get(\'upload_file\', {}).get(\'name\', file_id) files.append({\'id\': file_id, \'name\': file_name}) return jsonify(files) return jsonify({\'error\': \'获取文件列表失败\'}), response.status_codedef download_single_file(dataset_id, document_id): headers = { \'Authorization\': f\'Bearer {API_KEY}\', \'Content-Type\': \'application/json\' } # 获取文件下载地址 response = requests.get( f\'{BASE_URL}/v1/datasets/{dataset_id}/documents/{document_id}/upload-file\', headers=headers ) if response.status_code == 200: download_url = response.json().get(\'download_url\') if download_url: # 拼接完整的下载URL full_url = f\'{BASE_URL}{download_url}\' file_response = requests.get(full_url, headers=headers) if file_response.status_code == 200: return file_response.content return None@app.route(\'/api/download//\')def download_file(dataset_id, document_id): content = download_single_file(dataset_id, document_id) if content: return Response( content, mimetype=\'application/octet-stream\', headers={\'Content-Disposition\': \'attachment\'} ) return jsonify({\'error\': \'文件下载失败\'}), 400@app.route(\'/api/download-dataset/\')def download_dataset(dataset_id): # 获取文件列表 headers = { \'Authorization\': f\'Bearer {API_KEY}\', \'Content-Type\': \'application/json\' } response = requests.get( f\'{BASE_URL}/v1/datasets/{dataset_id}/documents\', headers=headers ) if response.status_code != 200: return jsonify({\'error\': \'获取文件列表失败\'}), response.status_code files = [] for item in response.json().get(\'data\', []): file_id = item[\'id\'] file_name = item.get(\'data_source_detail_dict\', {}).get(\'upload_file\', {}).get(\'name\', file_id) files.append({\'id\': file_id, \'name\': file_name}) # 创建ZIP文件 memory_file = io.BytesIO() with zipfile.ZipFile(memory_file, \'w\') as zf: for file in files: content = download_single_file(dataset_id, file[\'id\']) if content: zf.writestr(file[\'name\'], content) memory_file.seek(0) return Response( memory_file.getvalue(), mimetype=\'application/zip\', headers={\'Content-Disposition\': f\'attachment;filename=dataset_{dataset_id}.zip\'} )if __name__ == \'__main__\': app.run(debug=True)
3. 配置知识库的Base_URL和API_key
配置dify知识库和数据库鉴权信息,如下:
# 知识库API配置API_KEY = \'dataset-YNXAxOyNucHoyzVUN6MlPJXT\'BASE_URL = \'http://10.1.140.33\'
三、启动服务
#python3 app.py
访问 http://127.0.0.1:5000/ 进行下载文件或整个知识库



