当前位置: 代码网 > it编程>编程语言>Javascript > Express+React+Antd实现上传功能(前端和后端)

Express+React+Antd实现上传功能(前端和后端)

2024年05月28日 Javascript 我要评论
前端部分:1、新建react项目终端输入:npx create-react-app myapp执行后初始化reac项目就完成了。2、安装antdnpm install antd --save看到ant

前端部分:

1、新建react项目

终端输入:

npx create-react-app myapp

执行后初始化reac项目就完成了。

2、安装antd

npm install antd --save

看到antd及版本号说明安装成功。

3、使用upload组件

import react, { usestate } from 'react';
import { plusoutlined } from '@ant-design/icons';
import { image, upload } from 'antd';
const getbase64 = (file) =>
  new promise((resolve, reject) => {
    const reader = new filereader();
    reader.readasdataurl(file);
    reader.onload = () => resolve(reader.result);
    reader.onerror = (error) => reject(error);
  });
const myupload = () => {
  const [previewopen, setpreviewopen] = usestate(false);
  const [previewimage, setpreviewimage] = usestate('');
  const [filelist, setfilelist] = usestate([
    {
      uid: '-1',
      name: 'image.png',
      status: 'done',
      url: 'https://zos.alipayobjects.com/rmsportal/jkjgkefvpupvyrjuimnivslzfwpnjuuz.png',
    },
    {
      uid: '-2',
      name: 'image.png',
      status: 'done',
      url: 'https://zos.alipayobjects.com/rmsportal/jkjgkefvpupvyrjuimnivslzfwpnjuuz.png',
    },
    {
      uid: '-3',
      name: 'image.png',
      status: 'done',
      url: 'https://zos.alipayobjects.com/rmsportal/jkjgkefvpupvyrjuimnivslzfwpnjuuz.png',
    },
  ]);
  const handlepreview = async (file) => {
    if (!file.url && !file.preview) {
      file.preview = await getbase64(file.originfileobj);
    }
    setpreviewimage(file.url || file.preview);
    setpreviewopen(true);
  };
  const handlechange = ({ filelist: newfilelist }) => setfilelist(newfilelist);
  const uploadbutton = (
    <button
      style={{
        border: 0,
        background: 'none',
      }}
      type="button"
    >
      <plusoutlined />
      <div
        style={{
          margintop: 8,
        }}
      >
        上传图片
      </div>
    </button>
  );
  return (
    <>
      <upload
        action=""
        listtype="picture-card"
        filelist={filelist}
        onpreview={handlepreview}
        onchange={handlechange}
      >
        {filelist.length >= 8 ? null : uploadbutton}
      </upload>
      {previewimage && (
        <image
          wrapperstyle={{
            display: 'none',
          }}
          preview={{
            visible: previewopen,
            onvisiblechange: (visible) => setpreviewopen(visible),
            afteropenchange: (visible) => !visible && setpreviewimage(''),
          }}
          src={previewimage}
        />
      )}
    </>
  );
};
export default myupload;

前端部分完成。

后端部分

1、初始化

创建文件夹,打开终端输入:

npm init

可以看到自动生成了package.json

接下来安装express

npm install express --save

2、安装express-generator

npx express-generator  或者 npm install express-generator

express-generator可以为我们自动生成项目骨架。

骨架搭建完毕后再执行npm install 安装依赖,接着执行npm start,项目成功运行!

访问localhost:3000,3000为默认端口,看到如下页面说明express项目搭建完成。

3、图片上传接口

 在express中可以使用multer实现图片上传。

安装multer

npm install multer
import express from 'express'
import multer from 'multer'
const app = express()
// 设置存储配置
const storage = multer.diskstorage({
  destination: function (req, file, cb) {
    cb(null, 'uploads/')
  },
  filename: function (req, file, cb) {
    cb(null, file.fieldname + '-' + date.now() + file.originalname)
  }
})
const upload = multer({ storage: storage });
// 解析post请求body参数
app.use(express.urlencoded({extended: false }))
app.use(express.json())
// 托管静态文件
app.use('/uploads', express.static('uploads'))
// 设置跨域
app.all('*', function (req, res, next) {
  res.header('access-control-allow-origin', '*');
  res.header('access-control-allow-headers', 'content-type');
  res.header('access-control-allow-methods', '*');
  res.header('content-type', 'application/json;charset=utf-8');
  next();
});
// 处理上传的图片
app.post('/upload', upload.single('image'), (req, res) => {
  const file = req.file;
  console.log(file);
  if (!file) {
    return res.status(400).send('no file uploaded.');
  }
  res.json('file uploaded successfully.');
});
import routerlogin from './router/login.js'
import routerlist from './router/list.js';
app.use('/api', routerlogin)
app.use('/api', routerlist)
const port = 4000
app.listen(port, () => {
  console.log(`端口运行于http://127.0.0.1:${port}`);
})

到此这篇关于express+react+antd实现上传功能的文章就介绍到这了,更多相关express react antd上传内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com