ajax实现文件上传

核心两点

核心:上传文件最主要的两个核心:

  • post: 可以上传文文本和二进制数据(图片、视频、音频、)

  • 设置请求头Content-type:

    Content-type','application/x-www-form-urlencoded : 会把数据编码之后当做文本传输
    Content-type','multipart/form-data : 可以传递文本和二进制数据(实现文件的上传)
    Content-type: "text/plain"
    
    

传统方式上传(页面跳转)

使用node的第三方包实现文件上传,

multer

基本使用:

服务端server.js:

const express = require('express');
const path = require('path')
const fs = require('fs');
const multer = require('multer');
const app = express();

// 定义上传的目录
var upload = multer({
    dest: 'uploads/' })


// 托管静态资源
app.use('/uploads',express.static(path.join(__dirname,'uploads')))



app.get('/form',(req,res)=>{
   
    res.sendFile(path.join(__dirname,'form.html'))
})

app.get('/formajax',(req,res)=>{
   
    res.sendFile(path.join(__dirname,'form-ajax.html'))
})

app.get('/ajax',(req,res)=>{
   
    res.sendFile(path.join(__dirname,'ajax.html'))
})

app.get('/formjqueryajax',(req,res)=>{
   
    res.sendFile(path.join(__dirname,'form-jquery-ajax.html'))
})

//实现文件上传
app.post('/upload',upload.single('avatar'),(req,res)=>{
   
    console.log(req.body); //接收文本 text
    console.log(req.file); //接收文件上传成功后的信息
    if(req.file){
   
        // 进行文件的重命名即可 fs.rename
        let {
   originalname,destination,filename} = req.file;
        let dotIndex = originalname.lastIndexOf('.');
        let ext = originalname.substring(dotIndex);
        let oldPath = `${
     destination}${
     filename}`;
        let newPath = `${
     destination}${
     filename}${
     ext}`;
        fs.rename(oldPath,newPath,err=>{
   
            if(err){
    throw err; }
            res.json({
   message:'上传文件成功','path':newPath})
        })
    }else{
   
        res.json({
   message:'没有上传文件'})
    }
    
    
})

app.listen(4000,_=>console.log('服务器已经启动port4000'))

form.html文件内容

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset=
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值