美文网首页
http模块-上传文件的正确做法

http模块-上传文件的正确做法

作者: 静昕妈妈芦培培 | 来源:发表于2021-03-07 09:18 被阅读0次
const fs = require('fs')
const http = require('http')
const qs = require('querystring')


//创建一个服务器,回调会被自动添加到request事件,也就是每当有请求的时候就会触发这个回调
const server = http.createServer((req, res) => {

    const {pathname} = new URL(req.url, "http://localhost:8888/")

    if(pathname === '/upload' && req.method === 'POST') {
        //一定要设置编码
        req.setEncoding('binary')

        let boundary = req.headers['content-type'].split(';')[1].split('=')[1]
        //读取请求主体
        let reqBody = ''

        req.on('data', (chunk) => {
            reqBody += chunk
        })

        req.on('end', (chunk) => {
            // console.log(reqBody)
            //拿到图片类型
            const payload = qs.parse(reqBody, '\r\n', ": ")
            const type = (payload["Content-Type"])


            //拿到type再reqBody中所在的位置
            let typeIndex = reqBody.indexOf(type)
            let len = type.length

            //把文件类型以及文件类型之前的字符截取掉,保留之后的字符保存到imgData
            let imgData = reqBody.substring(typeIndex + len)

            //把imgData前面的两个空格去掉
            imgData = imgData.replace(/^\s\s*/, '')


            //将最后面的boundary及boundary前后的连个--去掉
            imgData = imgData.substring(0, imgData.indexOf(`--${boundary}--`))

            fs.writeFile('./foo.jpg', imgData, 'binary', (err) => {
                if(err) {
                    console.error(err)
                    return
                }
                //1.设置响应header
                //方法一:
                // res.statusCode = 200
                // res.setHeader('Content-Type', 'text/plain;charset=utf8')

                //方法二:
                res.writeHead(200, {
                    "Content-Type": "text/html;charset=utf8"
                })


                //2.设置响应结果
                res.write('<h1>文件上传成功</h1>')

                // 必须在每个响应上调用此 response.end() 方法,告诉服务器此消息已完成
                res.end()
            })


            
        })
    }
})



//开启服务器,并且指定监听的端口号和主机,当服务器开启成功的时候会执行回调函数,这个函数是异步的。
server.listen(8888, '0.0.0.0', () => {
    console.log('服务器启动成功')
})

启动服务器:


image.png image.png

结果:


image.png

相关文章

  • http模块-上传文件的正确做法

    启动服务器: 结果:

  • fastdfs启动与停止详解

    文件上传成功,需要安装Nginx作为服务器以支持Http方式访问文件。同时,后面安装FastDFS的Nginx模块...

  • node.js+express 文件上传以及图片上传

    文件上传multer模块官网 html页面 js代码 node层先引入multer模块,设置文件上传目录 再对上传...

  • HTTP上传文件

    重点:1.修改请求头Content-Type字段 e.g. Content-Type: multipart/for...

  • HTTP上传文件

    http协议之前是没有在提交表单的时候上传文件的功能,然后之后在rfc1867的提议中制订了出来 MIME类型为多...

  • Python之Requests模块

    Requests 模块说明:支持HTTP连接保持和连接池,支持cookie保持会话,支持文件上传,支持自动确定响应...

  • express文件上传下载功能实现

    node文件上传 安装模块 1.文件上传 npm install multer --save2.文件处理 npm ...

  • 2018-04-24

    js上传文件限制文件的类型 做后台管理需要限制上传文件的类型;具体做法如下所示: 《1》上传.csv格式的 《2》...

  • hutool部分使用记录

    http上传文件(MultipartFile接收)

  • 文件上传下载

    shp文件上传,formidable 安装formidable: 安装unzip模块 上传一个shp压缩文件至服务...

网友评论

      本文标题:http模块-上传文件的正确做法

      本文链接:https://www.haomeiwen.com/subject/wfiqqltx.html