django使用fetch上传文件

在上一篇文章中,我包装了fetch方法,使其携带cookie。但是之前fetch传递的是json数据,现在有了一个上传文件的需求,因此需要进行修改:

js 复制代码
const sendRequest = (url, method, data) => {
  const csrftoken = Cookies.get('csrftoken')
  const options = {
    method: method,
    headers: {
      'X-CSRFToken': csrftoken,
      // 'Content-Type': 'multipart/form-data', //这里可以是application/json,后端需要方式二获取参数
      withCredentials: true //跨域时携带cookie
    },
    credentials: 'include', //要求携带cookie,否则无法维持会话
  }
  if (method != 'GET' && data && Object.keys(data).length > 0) {
    if (data instanceof FormData) {
      options.body = data
    }
    else {
      let formdData = new FormData()
      for (let key in data) {
        let value = data[key]
        if (value instanceof Object
          && !(value instanceof File)
          && !(value instanceof Blob)) {
          value = JSON.stringify(value)
        }
        formdData.append(key, value)
      }
      options.body = formdData
    }
  }
  return fetch(`http://localhost:8000/${url}`, options)
}

这里还是选择使用formData进行传递数据,一是django可以从POST.get(key)直接获取参数,如果是浅层的就不需要额外json.parse 了,二是json传输文件需要base64,可能有性能损失。

注意

这里注意了,不要header中不要设置Content-Type,否则上传失败。

这是因为header中包含了一段boundary指明文件的间隔。可以看下成功的请求头:

在后端就从request.FILES.get(key)获取文件,从request.POST.get(key)获取其他参数。

在传参的时候,还是直接传递一个json就可以,然后将其处理为FormData格式。

相关推荐
清水白石00812 小时前
NumPy 向量化实战指南:从原理到实践的性能革命
python·numpy
Coding茶水间13 小时前
基于深度学习的猪识别系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
图像处理·人工智能·python·深度学习·yolo·目标检测
X54先生(人文科技)13 小时前
启蒙灯塔起源团预言—碳硅智能时代到来
人工智能·python·机器学习·语言模型
倔强的石头_13 小时前
【金仓数据库】ksql 指南(七) —— 启动和管理事务(KingbaseES 数据一致性保障)
数据库
qq_242188633213 小时前
快速搭建跨环境检测服务的步骤
linux·开发语言·windows·python·macos
志栋智能14 小时前
自动化运维真的只能选复杂平台吗?
运维·网络·数据库·人工智能·自动化
JaydenAI14 小时前
[拆解LangChain执行引擎]三种持久化模式的差异
python·langchain
LaughingZhu14 小时前
Product Hunt 每日热榜 | 2026-02-17
大数据·数据库·人工智能·经验分享·搜索引擎
老赵全栈实战14 小时前
《从零搭建RAG系统第4天:问题向量化+Milvus检索匹配+结果优化》
python·ai编程
Katecat9966314 小时前
【葡萄病害检测】基于SABL-RetinaNet的葡萄叶片黑腐病、霜霉病、白粉病和锈病自动识别系统
python