当前位置:首页 > React

前后端分离react如何上传附件

2026-01-25 23:56:12React

前后端分离React上传附件的方法

在前后端分离的架构中,React前端通常通过HTTP请求与后端API交互。上传附件通常使用multipart/form-data格式,以下是具体实现方法:

使用HTML表单和FormData对象

创建一个包含文件输入的表单,使用FormData对象封装文件数据:

import React, { useState } from 'react';

function FileUpload() {
  const [file, setFile] = useState(null);

  const handleFileChange = (e) => {
    setFile(e.target.files[0]);
  };

  const handleSubmit = async (e) => {
    e.preventDefault();
    const formData = new FormData();
    formData.append('file', file);

    try {
      const response = await fetch('/api/upload', {
        method: 'POST',
        body: formData,
      });
      const result = await response.json();
      console.log(result);
    } catch (error) {
      console.error('Error:', error);
    }
  };

  return (
    <form onSubmit={handleSubmit}>
      <input type="file" onChange={handleFileChange} />
      <button type="submit">Upload</button>
    </form>
  );
}

使用axios发送文件

如果项目中使用axios,可以通过类似方式发送文件:

import axios from 'axios';

const handleSubmit = async (e) => {
  e.preventDefault();
  const formData = new FormData();
  formData.append('file', file);

  try {
    const response = await axios.post('/api/upload', formData, {
      headers: {
        'Content-Type': 'multipart/form-data',
      },
    });
    console.log(response.data);
  } catch (error) {
    console.error('Error:', error);
  }
};

后端接口处理

后端需要支持multipart/form-data格式的请求。以Node.js Express为例:

const express = require('express');
const multer = require('multer');
const upload = multer({ dest: 'uploads/' });

const app = express();

app.post('/api/upload', upload.single('file'), (req, res) => {
  console.log(req.file);
  res.json({ message: 'File uploaded successfully' });
});

文件类型和大小限制

可以在前端添加验证:

const handleFileChange = (e) => {
  const selectedFile = e.target.files[0];
  if (selectedFile.size > 5 * 1024 * 1024) {
    alert('File size exceeds 5MB limit');
    return;
  }
  if (!['image/jpeg', 'image/png'].includes(selectedFile.type)) {
    alert('Only JPEG and PNG files are allowed');
    return;
  }
  setFile(selectedFile);
};

进度显示

使用axios可以显示上传进度:

const handleSubmit = async (e) => {
  e.preventDefault();
  const formData = new FormData();
  formData.append('file', file);

  const config = {
    onUploadProgress: (progressEvent) => {
      const percentCompleted = Math.round(
        (progressEvent.loaded * 100) / progressEvent.total
      );
      console.log(`${percentCompleted}% uploaded`);
    },
  };

  try {
    const response = await axios.post('/api/upload', formData, config);
    console.log(response.data);
  } catch (error) {
    console.error('Error:', error);
  }
};

多文件上传

支持多文件上传需要调整表单和FormData处理:

const [files, setFiles] = useState([]);

const handleFileChange = (e) => {
  setFiles([...e.target.files]);
};

const handleSubmit = async (e) => {
  e.preventDefault();
  const formData = new FormData();
  files.forEach((file) => {
    formData.append('files', file);
  });

  // 其余上传逻辑相同
};

后端需要相应调整:

前后端分离react如何上传附件

app.post('/api/upload', upload.array('files'), (req, res) => {
  console.log(req.files);
  res.json({ message: 'Files uploaded successfully' });
});

以上方法涵盖了React前端上传附件的主要场景和技术要点,可根据实际需求进行调整和扩展。

标签: 后端附件
分享给朋友:

相关文章

react实现附件功能

react实现附件功能

文件上传基础实现 使用HTML的<input type="file">元素配合React状态管理可以实现基本文件上传功能。创建一个受控组件来跟踪选中的文件: import { useSt…

uniapp后端服务器

uniapp后端服务器

uniapp后端服务器选择与搭建 uniapp作为跨平台开发框架,本身不限制后端技术选型。开发者可根据项目需求、团队技术栈选择适合的后端方案。以下是常见的后端服务器搭建方式: 云服务器自建后端 购…

vue实现后端管理系统

vue实现后端管理系统

Vue 实现后端管理系统 技术选型与工具 Vue 3 + TypeScript 是当前主流的技术组合,提供更好的类型检查和开发体验。搭配 Vue Router 实现路由管理,Pinia 或 Vuex…

vue文件下载后端实现

vue文件下载后端实现

后端实现方法 后端实现文件下载通常涉及设置响应头、读取文件流并返回给前端。以下是基于不同后端框架的实现示例: Node.js (Express框架) const express = require(…

后端如何使用react

后端如何使用react

后端集成 React 的方法 后端可以通过服务端渲染(SSR)或作为 API 服务器与 React 前端交互。以下是具体实现方式: 服务端渲染(SSR) 使用框架如 Next.js 或自定义 Nod…

vue实现附件组件

vue实现附件组件

Vue 实现附件组件的方法 基本文件上传功能 使用 HTML 的原生 <input type="file"> 元素结合 Vue 的数据绑定实现基础文件上传功能。通过 v-model 或 @…