You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

POST请求/upload-avatar/遇404及JSON解析错误,求排查解决

问题排查与解决

核心问题分析

404错误说明请求没匹配到Django的upload-avatar路由,JSON解析错误是因为服务器返回了HTML格式的404页面,前端硬要按JSON解析才触发语法错误。问题根源大概率是Apache没配置好请求转发,导致请求压根没到Django处理。

具体排查修复步骤

1. 补全Apache的Django WSGI转发配置

你当前只加载了mod_wsgi模块,但没配置把请求转给Django的WSGI入口文件,这是最关键的缺失项。在httpd.conf里添加以下配置:

# 把根路径请求转发到Django的wsgi.py文件
WSGIScriptAlias / "${INSTALL_DIR}/www/Chat/MediaSave/wsgi.py"

# 告诉WSGI进程Django项目的Python路径
WSGIPythonPath "${INSTALL_DIR}/www/Chat/MediaSave"

# 给wsgi.py所在目录配置访问权限
<Directory "${INSTALL_DIR}/www/Chat/MediaSave">
    <Files wsgi.py>
        Require all granted
    </Files>
</Directory>

注意替换${INSTALL_DIR}/www/Chat/MediaSave为你实际的Django项目根目录(就是包含wsgi.py的那个文件夹)。

2. 检查Django的MEDIA配置

确保settings.py里的MEDIA参数配置正确,不然文件存不了:

import os
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

同时手动在项目根目录建media/photos文件夹,给它设755权限,保证Apache能写入。

3. 修正前端请求路径(可选)

如果你的Django不是部署在Apache根路径,前端硬写/upload-avatar/容易出错。建议用Django模板生成正确URL:

<!-- 在HTML模板里加个隐藏域存路由 -->
<input type="hidden" id="uploadUrl" value="{% url 'upload_avatar' %}">

然后JS里拿这个URL发请求:

const uploadUrl = document.getElementById('uploadUrl').value;
fetch(uploadUrl, {
  method: 'POST',
  body: formData
})

4. 验证Apache配置并重启

  • 检查配置语法:打开WAMP的Apache菜单,选Service -> Test port 80,或者去Apache的bin目录跑httpd -t命令。
  • 重启Apache服务,让新配置生效。

5. 测试路由是否生效

直接在浏览器访问http://localhost/upload-avatar/,如果返回JSON格式的错误信息(比如{"error": "An error occurred while uploading the photo."}),说明路由已经通了;要是还跳404页面,再核对Apache里的WSGI路径有没有写错。

额外提醒

虽然你用了@csrf_exempt跳过CSRF验证,但生产环境建议保留。可以在前端请求里加CSRF令牌:

const csrfToken = document.querySelector('[name=csrfmiddlewaretoken]').value;
fetch('/upload-avatar/', {
  method: 'POST',
  headers: {
    'X-CSRFToken': csrfToken
  },
  body: formData
})

记得在HTML模板里加{% csrf_token %}。

内容的提问来源于stack exchange,提问作者Dream

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 02:35:13