React集成react-fine-uploader后,如何对接Flask-MongoDB文件上传服务?
React + Flask + MongoDB 文件上传完整方案(基于react-fine-uploader)
我看你已经搭好了基础框架,接下来我帮你补全前后端的对接逻辑,确保react-fine-uploader能和Flask后端配合,把文件成功存入MongoDB。
一、完善Flask后端代码
你给出的代码只写了一部分,我帮你补全完整的文件上传/查询接口,适配MongoDB的文件存储需求:
from flask import Flask, request, jsonify from pymongo import MongoClient import os import time from bson import Binary from flask_cors import CORS # 处理跨域,前后端端口不同时需要 app = Flask(__name__) # 初始化CORS,开发环境允许所有来源,生产环境请指定具体域名 CORS(app) map_dir = 'maps' # 确保临时文件目录存在(如果需要本地备份的话) os.makedirs(map_dir, exist_ok=True) # 连接MongoDB,替换成你的连接字符串 client = MongoClient('<connection_string>') db = client.business # 创建专门存储文件的集合 files_collection = db.uploaded_files @app.route('/maps', methods=['GET']) def get_uploaded_files(): """获取已上传文件的元数据列表""" files = [] # 只返回文件名、上传时间等元数据,不返回二进制内容 for doc in files_collection.find({}, {'_id': 0, 'filename': 1, 'upload_time': 1, 'content_type': 1}): files.append(doc) return jsonify(files) @app.route('/maps', methods=['POST']) def upload_file(): """接收前端上传的文件并存入MongoDB""" if 'file' not in request.files: return jsonify({'error': 'No file part in request'}), 400 file = request.files['file'] if file.filename == '': return jsonify({'error': 'No file selected'}), 400 if file: # 将文件内容转为MongoDB支持的Binary格式 file_binary = Binary(file.read()) # 准备文件元数据 file_info = { 'filename': file.filename, 'content_type': file.content_type, 'upload_time': time.strftime('%Y-%m-%d %H:%M:%S'), 'data': file_binary } # 插入MongoDB集合 files_collection.insert_one(file_info) return jsonify({'success': True, 'message': f'File {file.filename} uploaded successfully'}), 200 if __name__ == '__main__': app.run(debug=True)
后端关键说明
- 用
bson.Binary处理文件二进制数据,这是MongoDB存储文件的标准方式 - 新增跨域支持,解决React和Flask端口不同时的跨域问题
- GET接口只返回文件元数据,避免大量二进制数据传输占用带宽
二、前端react-fine-uploader配置
确保你已经安装了依赖:
npm install react-fine-uploader fine-uploader
然后编写React上传组件:
import React from 'react'; import FineUploaderTraditional from 'react-fine-uploader'; // 引入官方样式,让上传界面更美观 import 'fine-uploader/fine-uploader-gallery.css'; const FileUploader = () => { // 配置上传器参数,对接Flask后端 const uploaderConfig = { request: { endpoint: 'http://localhost:5000/maps', // 替换成你的Flask服务地址 method: 'POST' }, uploadSuccess: { // 上传成功后调用GET接口获取文件列表 endpoint: 'http://localhost:5000/maps', method: 'GET' }, autoUpload: true, // 选择文件后自动上传 retry: { enableAuto: true // 上传失败自动重试 } }; return ( <div className="upload-container"> <h3>上传文件至MongoDB</h3> <FineUploaderTraditional options={uploaderConfig} // 自定义上传按钮文本 buttonText="选择文件" /> </div> ); }; export default FileUploader;
前端关键说明
endpoint必须和Flask的接口地址完全匹配,注意端口号- 开启
autoUpload简化操作,也可以设置为false手动触发上传 - 引入官方样式可以快速得到一个美观的上传界面
三、测试验证步骤
- 启动Flask服务器:
python app.py - 启动React应用:
npm start - 在前端选择文件上传,上传完成后访问
http://localhost:5000/maps,可以看到已上传文件的元数据 - 打开MongoDB客户端,查看
business.uploaded_files集合,确认文件二进制数据已存入
内容的提问来源于stack exchange,提问作者minecraftplayer1234
相关产品推荐
相关产品推荐

