nodejs03中间件 -2 path、fs,multer

path 系统模块

        磁盘路径:
            编码:
                windows:  'c:\\user\\admin\\a.jpg'
                mac: ~/desktop/1901
            UI: 
                windows: c:\user\admin
                mac: ~/desktop/1901

            path.parse('c:\\wamp\\xx.png'); 磁盘路径(str -> obj)
                {
                   root: 'c:\\', 盘符
                   dir: 'c:\\wamp', 目录
                   base: 'xx.png',  文件名
                   ext: '.png', 扩展名
                   name: 'xx'   文件,不含扩展名
                }
            path.join('磁盘路径1','磁盘路径2')
                __dirname 魔术变量  返回当前文件所在的磁盘路径


            path.dirname == __dirname   当前文件位置

            path.resolve('磁盘路径1','磁盘路径n') 合并磁盘片段,右到左找根,左到右拼接,没有找到根,以当前文件路径为根

let path=require('path')//处理磁盘路径 转对象

let str ='c:\\user\\admin\\a.jpg';
let str2 ='~/desktop/1901';

// path.parse(str)→ Object
// console.log(path.parse(str))

// { root: 'c:\\',
//     dir: 'c:\\user\\admin',  盘符
//     base: 'a.jpg',           文件名
//     ext: '.jpg',             拓展名
//     name: 'a' }              名字不含拓展名

let str3='c\\user\\admin'
let str4='a.jpg'
// console.log(path.join(str3,str4))
// c\\user\\admin\a.jpg

//  __dirname   返回当前模块所在的磁盘路径
// path.resolve('磁盘路径1','磁盘路径n')一个完整的磁盘路径
// console.log(path.join('public','img','a.text'))
//有问题,没有根符
// console.log(path.join(__dirname,'public','img','a.text'))
console.log(path.resolve(str3,str4))

 
 

multer: 文件上传
multer->文件名会随机->fs模块改名->path系统模块解析磁盘路径

    文件上传:前端表单->后端接收到文件本身->保存到服务器上->给数据库记录文件一些信息->库返回给nodejs相关信息->nodejs返回给前端
            前端: <pre><input type=file enctype="multipart/form-data" name="fieldname" </pre>
            后端:multer 接受 form-data编码数据 
        配置
        let multer  = require('multer');    引入
        let objMulter = multer({ dest: './upload' });   实例化  返回 multer对象
            dest: 指定 保存位置(存到服务器)
        app.use(objMulter.any());   any 允许上传任何文件
        req.files   数组
            fieldname: 表单name名
            originalname: 上传的文件名
            encoding: 编码方式
            mimetype: 文件类型
            buffer: 文件本身
            size:尺寸
            destination: 保存路径
            filename: 保存后的文件名  不含后缀
            path:   保存磁盘路径+保存后的文件名 不含后缀
    **fs模块**:  操作是异步的
        fs.rename('当前文件','该后的文件名',(err)=>{});

let express=require('express')
let multer=require('multer') //引入 类
let app=express()
let fs=require('fs')
let path=require('path')

app.listen(3000)
app.use(express.static("./public"))
// 安装配置中间件
var upload=multer({dest:'uploads/'})//实例化,工厂方法upload==实例
app.use(upload.any()) //控制上传文件的类型,any是任意,text是只是文件
// app.use('/reg',(req,res,next)=>{
//     console.log('files',req.files)
//     res.end()
// })
app.post('/reg',(req,res,next)=>{
    console.log('files',req.files)
    // 改名
    fs.renameSync('./uploads/'+req.files[0].filename,
    './uploads/'+req.files[0].filename+path.parse(req.files[0].originalname).ext)//uploads内会重新生成一个可以查看的完整的图片
    // 存库
    // 返值
    res.send({err:0,url:'http://localhost:3000/uploads/'+req.files[0].filename+path.parse(req.files[0].originalname).ext})
    // res.end()
})//postman在form-data内写上传文件,会转存文件到uploads文件夹内(文件名随机)然后改名rename

转载于:https://www.cnblogs.com/sansancn/p/11012841.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它可以使JavaScript在服务器端运行。要实现文件上传和下载,可以使用Node.js的一些模块和框架来简化开发过程。 对于文件上传,可以使用Multer作为中间件进行数据处理。Multer是一个流行的Node.js中间件,用于处理表单数据,特别是文件上传。以下是一个简单的示例代码: ```javascript const express = require('express'); const multer = require('multer'); const app = express(); const upload = multer({ dest: 'uploads/' }); app.post('/upload', upload.single('file'), (req, res) => { // 处理上传的文件 console.log(req.file); res.send('文件上传成功!'); }); app.listen(8080, () => { console.log('服务器已启动,监听端口8080'); }); ``` 上述代码创建了一个基本的Express应用程序,并使用Multer中间件来处理文件上传。`upload.single('file')`表示只接受名为`file`的单个文件。在回调函数中可以进行文件处理的操作。 对于文件下载,可以使用Node.js的内置模块`fs`和`http`来实现。以下是一个简单的示例代码: ```javascript const http = require('http'); const fs = require('fs'); http.createServer((req, res) => { if (req.method === 'GET' && req.url === '/download') { const file = fs.createReadStream('path/to/file.txt'); res.setHeader('Content-disposition', 'attachment; filename=file.txt'); file.pipe(res); } }).listen(8080, () => { console.log('服务器已启动,监听端口8080'); }); ``` 上述代码创建了一个简单的HTTP服务器,当GET请求路径为`/download`时,会将文件作为附件下载。可以通过设置`Content-disposition`头来指定下载文件的名称。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值