react结合nodejs实现文件上传

react代码
至于跨域的问题随便解决 res.setHeader(“Access-Control-Allow-Origin”,"*")
或者使用nginx代理解决 我是用nginx

ajax文件提交 用jQuery可以看这个
https://blog.csdn.net/qq_43505774/article/details/106179854

import axios from 'axios'
import qs from 'qs'
axios.defaults.baseURL="/user/"//这是为匹配nginx代理请求加的前置
change(e){
      const file=new FormData();
      file.append("img",e.target.files[0])//这个是nodejs接收的文件名img
      const header={
        headers:{
          "Content-Type":"multipart/form-data"
        }
      }
      axios.post("upload",file,header).then((x)=>{
      //upload我的express.post的路由匹配规则
      //axios请求会默认带上ip地址 默认前缀 自己加的url 简单
      //你要是使用jQuery 原理差不多 区别有一点 
        console.log(x.data)
      })
    }
render(){
return <input type="file" onChange={this.change.bind(this)}/>
}

nodejs代码

var express=require('express')
var app = require("express")();
var http = require("http").createServer(app);
var body=require("body-parser")
var file=require("formidable")
var fs=require("fs")
var pa=require("path")
var b=body.urlencoded({extended:false})
app.use("/uploads",express.static("/uploads"))//静态文件模块设置
//在使用nodejs里面使用require采用commonjs模块
//在es6里面的js使用impore 通过export或者export default
app.get("/",(req,res)=>{
res.sendFile(__dirname + "/index.html");
});
app.post("/user/upload",b,(req,res)=>{
    const f=new file.IncomingForm()
    f.uploadDir="./uploads"//上传目录 最好是使用express.static中间件同步
    f.parse(req, function (err, fields, files) {
        if (err) {
            console.log(err)
        } else {
            var oldPath = files.img.path; //img是formdata的append键值对
            //uploads\upload_c8e633db36ddbe45c6f13e059
            //文件上传服务器控制台显示默认文件路径 没有后缀
            var fileName=files.img.name //文件在本地的名字      
            var newPath = pa.join(__dirname,'/uploads/'+fileName);   //文件上传服务器的路径
            fs.rename(oldPath, newPath, function () {
            //使用fs.rename把服务器上传文件默认路径替换成文件上传服务器路径
            //也就是说之前是二进制的乱码而且没有后缀,我们用fs.rename给文件
            //加上路径与后缀,让这个二进制按照后缀的规则显示,
            
                if(err){
                    res.json({
                        err:"404"
                    })
                }else {
                   res.json({
                       err:"200"
                   })
                }
            })
        }
    
    })
})
app.post("/user/details",b,(req,res)=>{
    var form={
        user:req.body.user,
        pass:req.body.pass
    }
    res.json(form)
})
app.get("/user/details",(req,res)=>{
    res.json({
        user:"liu",
        pass:"0519"
    })
})


http.listen(3000,()=> { console .log('123'); });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值