diff --git a/Merge/back_wzy/routes/__pycache__/posts.cpython-310.pyc b/Merge/back_wzy/routes/__pycache__/posts.cpython-310.pyc
index 7d61b05..45d3343 100644
--- a/Merge/back_wzy/routes/__pycache__/posts.cpython-310.pyc
+++ b/Merge/back_wzy/routes/__pycache__/posts.cpython-310.pyc
Binary files differ
diff --git a/Merge/back_wzy/routes/posts.py b/Merge/back_wzy/routes/posts.py
index 14ff64c..a016f69 100644
--- a/Merge/back_wzy/routes/posts.py
+++ b/Merge/back_wzy/routes/posts.py
@@ -4,16 +4,47 @@
 from extensions    import db
 from models.post   import Post
 from models.behavior import Behavior
+from utils.Fpost import Fpost
+import json
 
 posts_bp = Blueprint('posts', __name__)
 
 @posts_bp.route('', methods=['POST'])
 def create_post():
-    data = request.get_json() or {}
-    post = Post(**data)
-    db.session.add(post)
-    db.session.commit()
-    return jsonify({'id': post.id}), 201
+    try:
+        # 获取文本字段
+        user_id = request.form.get('user_id')
+        title = request.form.get('title')
+        content = request.form.get('content')
+        status = request.form.get('status', 'published')
+        topic_id = request.form.get('topic_id')
+        media_count = int(request.form.get('media_count', 0))
+        
+        if not user_id or not title or not content:
+            return jsonify({'error': '缺少必要字段'}), 400
+        
+        # 获取上传的文件
+        files = []
+        for i in range(media_count):
+            file_key = f'media_{i}'
+            if file_key in request.files:
+                files.append(request.files[file_key])
+        
+        # 使用 Fpost 创建帖子
+        fpost = Fpost(db.session)
+        new_post = fpost.create_post_with_files(
+            user_id=int(user_id),
+            title=title,
+            content=content,
+            topic_id=int(topic_id) if topic_id else None,
+            status=status,
+            files=files
+        )
+        
+        return jsonify({'id': new_post.id}), 201
+        
+    except Exception as e:
+        return jsonify({'error': str(e)}), 500
 
 @posts_bp.route('', methods=['GET'])
 def list_posts():
@@ -59,14 +90,64 @@
 def update_post(post_id):
     """
     修改帖子字段（可选字段：title, content, topic_id, media_urls, status）
+    支持FormData和JSON两种格式
     """
-    post = Post.query.get_or_404(post_id)
-    data = request.get_json() or {}
-    for key in ('title', 'content', 'topic_id', 'media_urls', 'status'):
-        if key in data:
-            setattr(post, key, data[key])
-    db.session.commit()
-    return '', 204
+    try:
+        fpost = Fpost(db.session)
+        
+        # 检查是否是FormData请求
+        if request.content_type and 'multipart/form-data' in request.content_type:
+            # FormData请求
+            title = request.form.get('title')
+            content = request.form.get('content')
+            status = request.form.get('status')
+            topic_id = request.form.get('topic_id')
+            media_count = int(request.form.get('media_count', 0))
+            existing_media_urls_str = request.form.get('existing_media_urls')
+            
+            # 解析现有媒体URLs
+            existing_media_urls = None
+            if existing_media_urls_str:
+                try:
+                    existing_media_urls = json.loads(existing_media_urls_str)
+                except:
+                    existing_media_urls = None
+            
+            # 获取新上传的文件
+            files = []
+            for i in range(media_count):
+                file_key = f'media_{i}'
+                if file_key in request.files:
+                    files.append(request.files[file_key])
+            
+            # 更新帖子
+            updated_post = fpost.update_post_with_files(
+                post_id=post_id,
+                title=title,
+                content=content,
+                topic_id=int(topic_id) if topic_id else None,
+                status=status,
+                files=files if files else None,
+                existing_media_urls=existing_media_urls
+            )
+            
+        else:
+            # JSON请求（保持原有逻辑）
+            post = Post.query.get_or_404(post_id)
+            data = request.get_json() or {}
+            for key in ('title', 'content', 'topic_id', 'media_urls', 'status'):
+                if key in data:
+                    setattr(post, key, data[key])
+            db.session.commit()
+            updated_post = post
+        
+        if not updated_post:
+            return jsonify({'error': '帖子不存在'}), 404
+            
+        return '', 204
+        
+    except Exception as e:
+        return jsonify({'error': str(e)}), 500
 
 @posts_bp.route('/<int:post_id>', methods=['DELETE'])
 def delete_post(post_id):
