nodejs——上传图像Upload——简单版

运用nodejs模块,需要下载nodejs(可以在菜鸟教程下载)
学习前端的我们,写一个项目之前,都先创建文件夹,我在这用的(vscode)

上传图像
1.用开发软件打开创建文件 (名字必须是英文,可以写入之后在进行修改名字,在开发过程需要用英文命名) 3在开发软件里打开终端,
[不知道可以点击查看图片](https://img-blog.csdn.net/20181010193446759?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjg1MzM1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
出现下面状态:

image.png

3.在终端里面输入:npm init ,一直回车,生成package.json


image.png

image.png

4.因为我们写项目需要nodejs中的好多模块,所以需要在后端安装

1.express模块 安装express ---- npm install express

image.png

2.multer 模块 安装multer ---- npm install multer


image.png

5.在文件夹下面创建public文件夹-存放前端呈现页面,在public下面创建文件index.html,upload.html,在文件夹下面创建index.js 写后端


image.png

下面我们就开始写页面
先写主页index.html
主页内容:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>这是主页</title>
</head>
<body>
    <!-- form表单 -->
    <!-- action="" 接口名字(前后端的连接) method方法,form表单支持两种方式POST,GET 默认是GET -->
    <form action="/upload" method="POST" enctype="multipart/form-data">
        <!-- input 类型 = file 文件选择器, accept接受,属性值表示接受的类型。required表示必填,name的值是后端获取的值 -->
        <input type="file" accept="image/jpg,image/png,image/jpeg,image/gif" required name="photo">
        <!-- input 类型 = submit 表示点击按钮 -->
        <input type="submit" value="上传图像">
    </form>
    
</body>
</html>
image.png

呈现的结果:


image.png
页面可能有点丑,这里主要教给大家上传图像的过程 其实呈现给人们观看的页面就这些,uoload.html我们大家也可以不需要, 如果写项目,需要多个网页,那么上传这块的内容就要写入到upload.html(当然名字是自己起的)

2.写后端 index.js

1.模块
// 先导入需要的模块
var express = require('express')
// express 模块是nodejs的http框架,他封装了nodejs模块,使创建的服务器更简单方便,

var multer = require('multer')
// multer模块,nodejs中间件,用于上传图片

var bodyParser = require('body-parser')
// 如果使用POST方法,就必须导入bodyParser,body-parser请求体解析模块,是express的中间件用于接受请求体中的数据,并解析为对象,解析之后的对象会将作为body属性添加给rep对象

var web = express()
web.use(express.static('public'))
// 设置服务器静态文件夹,里面的文件都是呈现给人们看的网页
web.use(bodyParser.urlencoded({extended:false}))
// 插入中间件 ,bodyParser.urlencoded 用来解析 request 中的body中的urlencoded字符

备注截图里面,12,14行,正确是web.use里面写错的


image.png
2:设置上传图像
// 设置随机名字
var index =Math.floor(Math.random()*100)
var fullName = ''

// 思路
// 上传内容并储存——1.设置存储的地方——2.设置存储时的名字{1.获取原来名字的后缀,2.再重新命名}
var headerConfig = multer.diskStorage({
    // destination目的地
    destination: 'public/headers',
    // fliename 文件名 后面跟函数,函数有三个参数
    // file为当前上传的图片 
    filename: function (req, file, callback) {
        // 先获取原来图片的后缀名

        //  1.选找到图片的名字,并进行分割
        var nameArray = file.originalname.split('.')
        // 长度是从1开始的 索引是从0开始的
        // [1,2,3,4]长度4 -1 [nameArray.length - 1]索引
        var type = nameArray[nameArray.length - 1]

        // 新的名字 = 随机数组.照片类型
        var imageName = index + '.' + type;
        fullName = imageName

        // 设置回调的内容,参数1:错误信息,参数2:图片新的名字
        callback(null, imageName)

    }
})
image.png
3.设置上传接口
// 设置使用当前的配置信息
// 上传完照片后要使用的配置信息
var upload = multer({storage:headerConfig})

// single 上传单个文件; photo 为前端上传图像的input标签的name值
// upload.single('photo')每次上传单个照片的配置信息
web.post('/upload',upload.single('photo'),function(req,res){
    res.send('')
    console.log('上传成功')

})
image.png
4.写前端获取照片的接口
<script>
        var submit = document.querySelectorAll('input')[1]
        submit.addEventListener('click', function () {
            setTimeout(() => {
                window.location.href = 'http://localhost:8080'
            },10);
        })
        function getHeader() {
            var xhr = new XMLHttpRequest()
            xhr.open('get', '/getMyHeader')
            xhr.send()
            xhr.onreadystatechange = function () {
                if (xhr.readyState == 4) {
                    console.log(xhr.responseText)
                    // 创建一个标签 
                    var img = document.createElement('img')
                    img.style.width = '100px'
                    img.style.height = '100px'
                    img.style.border = '1px solid black'
                    img.src = xhr.responseText
                    document.body.appendChild(img)
                }
            }
        }
        // 调用函数
        getHeader() 
    </script>
image.png
5.后端发送照片给页面显示
web.get('/getMyHeader',function(req,res){
    res.send('headers/'+ fullName)

})

image.png

最后 端口号

web.listen('8080',function(){
    console.log('服务器开启..')
})

来自:https://blog.csdn.net/qq_43285335/article/details/83004649

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,692评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,482评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,995评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,223评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,245评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,208评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,091评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,929评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,346评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,570评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,739评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,437评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,037评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,677评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,833评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,760评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,647评论 2 354