node中文件的上传与下载

2023-11-14

一、node基于Express项目实现文件的上传

1、FormData对象:以对象的方式来表示页面中的表单,又称为表单对象。以key-value的方式来保存数据,XMLHttpRequest对象可以轻松的表单对象发送的服务器端;

(1)使用构造函数实例化对象

//将页面中的表单form转换成FormData对象(即将表单数据转换成key-value对)
let  formdata = new FormData(form); 

(2)常用的API:

​ formData.append(key,value):追加数据。向formdata中追加key-value

 formData.get(key):获取key对应的值

​ formData.delete(key):删除key对应的值

 ​formData.has(key):判断formdata中是否有key

2、node使用formidable模块实现文件上传

(1)安装:npm install formidable

(2)创建Formidable.IncomingForm对象:本质是一个表单对象

​         let form = new Formidable.IncomingForm()

​ (3)Formidable.IncomingForm对象的属性:

        ​ form.encoding : 设置字符集

        ​ form.uploadDir:设置上传文件的保存路径

        ​ form.keepExtensions:true,表示上传时保留原来的扩展名

 (4)Formidable.IncomingForm对象的方法:

​         form.parse(request, [callback]):转换请求中的表单数据

(5)Formidable.File对象的属性

​         size:上传文件的大小

​         path:上传文件的路径

​         type:上传文件的类型

​         name:上传的文件名

3、示例:

(1)前端页面包含表单的所有数据(包含头像文件),代码如下

html:

 js中对数据进行打包,代码如下

            // 注册按钮
            $('.btn_reg').bind('click', () => {
                //将表单数据打包至formdata对象中
                let formdata = new FormData();
                //使用对象的append方法将数据以键值对的形式保存
                formdata.append('registerName', $('.userName').val());
                formdata.append('registerPhone', $('.userPhone').val());
                formdata.append('registerPwd', $('.password').val());
                formdata.append('registerSex', $('.uerSex').val());
                formdata.append('registerEmail', $('.userEmail').val());
                formdata.append('headImage', $('#file')[0].files[0]);
                
                //使用jQery的ajax
                $.ajax({
                    //后台注册接口
                    url: 'http://localhost:8099/movieUser/addUser',
                    type: 'post',
                    data: formdata,
                    cache: false,
                    contentType: false,
                    processData: false,
                    success: function (res) {
                        if (res.code == 2000) {
                            window.parent.location.reload();  //刷新页面
                        }
                    }
                })
             
            });

     //显示上传图像
        function show(imgFile) {
            $('#img').attr('src', window.URL.createObjectURL(imgFile.files[0]))
        }

(2)后台服务控制层中使用formidable模块接收数据

 对应dao层操作数据库的函数

 //保存用户信息(向数据库中增加记录)
    insertUser: async (user)=>{//user参数,由服务层对表单请求对象进行封装,并传入
        const result = await movie_userModel.create(
            {
                user_name:user.name,
                password: user.password,
                user_email:user.email,
                user_sex:user.sex,
                user_phone: user.phone,
                head_portrait: user.head_portrait,//头像上传服务器保存的地址
                register_time: user.time,
            }
        );
        return result;
    },

二、Express实现文件下载

        使用res对象(响应对象)的download方法即可

实现思路:遍历下载文件夹下的文件,拼接成一个下载的url,传递到前端

代码示例如下:

后台接口

// 遍历下载文件夹的接口:http://localhost:8089/updown/getfiles
router.get('/getfiles',(req, res) => {
    //1.遍历下载文件夹:public/images/uploads
    let filePath = path.join(__dirname,'../../public/images/uploads/') //下载文件夹
    let url_arr = [] //存放下载的url
    fs.readdir(filePath,(err,files)=>{ //files参数中存放的filePath下的子目录名和文件名
        if (err){
            console.log(err)
        }else{
            for(let i=0;i<files.length;i++){
                let fileDir = path.join(filePath,files[i])
                if (fs.statSync(fileDir).isFile()){ //表示当前的files[i]是一个文件
                    let urlObj = {
                        fileName: files[i],  //文件名
                        downloadUrl: `http://localhost:8089/updown/download?fileName=${files[i]}`
                    }
                    url_arr.push(urlObj) //把要下载的文件路径、文件放入数组中
                }
            }
            res.json(url_arr);//将数据响应给前端
        }
    })
})

前端页面:

<body>
    <div id="box"></div>
    <script src="./js/jquery-3.4.1.js"></script>

    <script>
        $(function(){
            $.ajax({
                url: 'http://localhost:8089/updown/getfiles',
                type:'get',
                dataType:'json',
                success: function(result){
                    for(let data of result){
                        $('#box').append(`<a href=${data.downloadUrl}>下载${data.fileName}</a><br><br>`)            
                                 
                    }
                }
            })
        })
    </script>
</body>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

node中文件的上传与下载 的相关文章

  • Dimple.js - 将数据标签添加到条形图的每个条形

    我使用的是dimple js 它基于d3 js 是否可以向本示例中提到的条形图的每个条形添加数据标签http dimplejs org examples viewer html id bars vertical http dimplejs
  • 使用日期类型将输入字段中的日期居中

    我想将日期居中input not input inside div 如果我进行居中 它将把日期居中于input因为有一个右侧面板用于根据日历选择日期 该面板根据输入宽度调整大小 用于演示的小代码片段 center text align ce
  • 为什么 `obj.foo = function() { };` 没有将名称 `foo` 分配给函数?

    从 ES2015 ES6 开始 函数有了专有名称 包括官方名称 name属性 而函数创建时的赋值除了明显的函数声明和命名函数表达式之外还有多种方式 比如给变量赋值 函数的名字设置为变量的名字 给对象属性赋值 函数的名称设置为属性的名称 甚至
  • 邮件附件媒体类型错误 Gmail API

    我正在尝试通过 Javascript 客户端中的 Gmail API 发送带有附加 jpeg 文件的消息 到目前为止我写的代码如下 ajax type POST url https www googleapis com upload gma
  • 允许指针(单击)事件穿过元素,同时保持滚动功能

    我的目标是拥有一个允许 下面要点击 交互的元素 滚动 众所周知 1 的解是pointer events none 这正如中所描述的单击 DIV 到底层元素 https stackoverflow com questions 3680429
  • 从 DOM 中删除后,动态添加的 JavaScript 脚本会继续执行

    因此 我正在创建一个 SPA 并使用 AJAX 将 HTML 页面加载到我网站的索引页面中 问题是 当包含我的一个页面时 它似乎会徘 徊并执行其中的 JavaScript 代码 即使它随后从 DOM 中删除 索引 html 正文 div d
  • 记录jQuery中调用的方法和参数

    假设我有 jQuery 并且加载了几个插件 我运行一些这样的代码 someSelector someMethod someParam someOtherParam someOtherSelector someOtherMethod anot
  • 为什么“dtoa.c”包含这么多代码?

    我将是第一个承认我对低级编程的整体知识有点稀疏的人 我理解许多核心概念 但我不经常使用它们 话虽这么说 我对需要多少代码感到非常惊讶dtoa c http www netlib org fp dtoa c 在过去的几个月里 我一直致力于用
  • 使用 easyXDM 调整 IFrame 大小

    我将 iFrame 代码提供给客户 以便他们可以显示我网站上的动态内容 我希望其页面上的 iFrame 能够调整大小以适合我的内容 我按照 easyXDM 网站的说明进行操作 但也许我遗漏了一些东西 我没有收到任何错误 但 iFrame 保
  • 为什么我的 onclick 事件自动触发

    加载页面时最初显示 Hello World 我希望它仅在单击按钮后显示 我知道我可以通过向按钮添加内联事件侦听器来做到这一点 我可以只用脚本编写所有这些代码吗
  • 带有嵌入式 Ruby 的 Javascript:如何安全地将 ruby​​ 值分配给 javascript 变量

    我在页面的 javascript 块中有这一行 res foo 处理这种情况的最佳方法是什么 ruby var里面有单引号吗 否则会破坏 JavaScript 代码 我想我会用红宝石JSON http json org ruby var 上
  • Web浏览器控件:如何捕获文档事件?

    我正在使用 WPF 的 WebBrowser 控件加载一个简单的网页 在这个页面上我有一个锚点或一个按钮 我想在我的应用程序后面的代码中 即在 C 中 捕获该按钮的单击事件 WebBrowser 控件是否有办法捕获加载页面元素上的单击事件
  • 如何在 OpenLayers 3 中删除监听器

    我做了一个copy https gis stackexchange com questions 178222 how to delete a listener in openlayers 3我在 stackoverflow 上提出的问题 因
  • 如何为 ng-repeat orderBy 创建回调?

    寻找一种方法让 AngularJS 的 ng repeat orderBy 过滤器在完成渲染后执行回调 Markup div table thead tr th Name th th Age th tr thead tbody tr tr
  • 如何使用 .append() 将 React 组件附加到 HTML 元素

    我正在尝试对我的博客实现无限滚动 我有 const articlesHTML document querySelector articles 作为容器 每次点击装载更多按钮 我想将新文章附加到主 html 元素 如下所示 const res
  • Javascript - 如何计算数字的平方?

    使用 JavaScript 函数 function squareIt number return number number 当给定数字 4294967296 时 函数返回 18446744073709552000 每个人都知道真正的答案是
  • 获取 2 个日期之间的月份名称

    我有两个约会from and to 我想获取这两个日期之间的所有月份名称 以下是我的代码 var monthNames January February March April May June July August September
  • 使用 dnode 从服务器向客户端发送消息

    几个月前 我发现了 nowjs 和 dnode 并最终使用了 nowjs 并且https github com Flotype nowclient https github com Flotype nowclient 用于客户端 服务器双向
  • 如何在 jQuery 中检查复选框是否被选中?

    我需要检查checked复选框的属性 并使用 jQuery 根据选中的属性执行操作 例如 如果age复选框被选中 然后我需要显示一个文本框来输入age 否则隐藏文本框 但下面的代码返回false默认情况下 if isAgeSelected
  • html5 canvas 使用图像作为蒙版

    是否可以使用具有形状的图像作为整个画布或画布内图像的蒙版 我想将图像放置在画布中 并在图像上添加蒙版 然后将其另存为新图像 您可以使用 source in globalCompositeOperation 将黑白图像用作蒙版 首先 将蒙版图

随机推荐

  • 云原生入门到进阶,1篇就够了!

    开始阅读文章前 请角色切换 设想你作为一位中小型IT公司CTO 面对云原生技术决策 你需要回答两个问题 为什么需要上云 上云有何弊端 作为一家公司的技术决策者 必须理解上云的利与弊 并结合公司各阶段发展目标给出最适合的技术方案 云原生 概述
  • 输入pip命令时,报错Fatal error in launcher

    因为之前也有碰到过这样一个问题 当时了解到是升级pip导致的一些错误 后来通过百度找到了一个解决方案 python m pip 只要是需要用到pip的地方 全部加上python m 好了 解决了问题 这是当时的一个解决方法 问题是解决了 当
  • 用Java代码操作RabbitMQ(包括创建和绑定)

    生产者 package com sky rabbitmq all import com rabbitmq client Channel import com rabbitmq client Connection import com rab
  • AcdbTable 例子学习笔记

    Table 例子学习笔记 在这个例子中 ARX向我们展示了ACDBTABLE类的一些基本操作方法 ACDBTABLE类是ACAD2005及其以后的产品 应该是说ACDBDATATABLE的升级产品 AcDbDataCell AcDbData
  • 判断一个list里是否有其他list------集合list的contain方法

    判断一个list里是否有其他list 最近在做项目时需要判断一个list里是否有其他list 首当其冲就直接想到了contains方法 但总是出现Bug 后面找了好久才发现是这个原因 基础太不扎实 list的contains在比较包含对象时
  • 【HarmonyOS】实现从视频提取音频并保存到pcm文件功能(API6 Java)

    关键字 视频提取类Extractor 视频编解码 保存pcm文件 写在前面 在使用API6开发HarmonyOS应用时 通常会开发一些音视频媒体功能 这里介绍如何从视频中提取音频保存到pcm文件功能 生成pcm音频文件后 就可使用音频播放类
  • ES6知识点总结——学习网站及环境搭建

    1 ES6学习网站 ES6官网 https 262 ecma international org 6 0 阮一峰ES6学习电子书 https es6 ruanyifeng com docs let W3Cschool ES6中文教程 htt
  • html5导航栏文字间距,div字间距-div内文字之间间距设置方法

    本篇文章给大家带来的内容是关于div字间距 div内文字之间间距设置方法 有一定的参考价值 有需要的朋友可以参考一下 希望对你有所帮助 div内字与字间距是否可以用CSS代码实现 答案 可以使用css实现div字间距布局 CSS字间距的单词
  • nested exception is java.io.FileNotFoundException: class path resource [applicationContext.xml] cann...

    org apache ibatis exceptions PersistenceException Error building SqlSession The error may exist in pojo UserMapper xml C
  • React hooks + antd前台实现input搜索框实时搜索table表格

    阅读本文前提需掌握react hooks 中useState和useEffect基本用法 详见 可选链 语法糖 文章目录 实现效果 实现步骤 1 引入 2 初始化 3 筛选数据 4 输入和展示数据 实现效果 实现步骤 1 引入 Search
  • 基于单片机语音识别智能家居系统的设计与实现

    功能介绍 以STM32单片机作为主控系统 液晶显示当前环境温湿度 用电器开关状态 通过语音模块识别设定的语音 DHT11进行环境温湿度采集 通过语音播报模块报当前温湿度 智能回复 通过语音识别可以打开灯 窗帘 电视空调等设备 整个电路以5v
  • vue项目运行后如何自动在浏览器中打开

    方法一 配置open 在根目录webpack config js或vue config js中的module exports里面配置devServer open 将open属性值设置为true即可 devServer host localh
  • 总结-深度学习中的正则化方法(regularization)

    深度学习面临的非常严重的一个问题就是过拟合 overfitting 通过一些正则化的方法 可以消除过拟合 从而使我们的模型能够得到更好的效果 1 什么是正则化 这张图 我想接触过机器学习的朋友们应该都看了很多遍了吧 我们先从回归的角度来看待
  • Java编译运行命令

    javac 编译命令 javac是用来编译 java文件的 dos窗口直接输入javac可以看到大量提示信息 提示javac命令的用法 用法 javac
  • 电脑没有摄像头怎么办

    电脑没有摄像头怎么办 电脑没有摄像头但是需要用到摄像头怎么办 没有带数据线但是需要用到手机的摄像头怎么办 下面是采用软件的方式连接电脑作为电脑摄像头的方法 1 iVcam iVCam Use mobile phone as a PC web
  • 服务器简单的命令操作系统,服务器操作系统常用命令

    服务器操作系统常用命令 内容精选 换一换 华为云帮助中心 为用户提供产品简介 价格说明 购买指南 用户指南 API参考 最佳实践 常见问题 视频帮助等技术文档 帮助您快速上手使用华为云服务 当您发现云服务器的运行速度变慢或云服务器突然出现网
  • 一、django错误集合

    1 django core exceptions ImproperlyConfigured WSGI application LARS wsgi application could not be loaded Error importing
  • 强迫自己学习Jquery三

    元素定位问题 offset 和 position必须要好好看一下 转载于 https www cnblogs com jamesldj p 3323707 html
  • 前端系列之jQuery(jQuery选择的艺术)

    一 jQuery是什么 是一款JavaScript库 方便地处理HTML 事件 动画等 html 处理HTML文档中的DOM节点 如添加 删除等 事件 通过jQuery对页面上的事件进行处理 动画 通过jQuery实现淡入 淡出 滑动等动画
  • node中文件的上传与下载

    一 node基于Express项目实现文件的上传 1 FormData对象 以对象的方式来表示页面中的表单 又称为表单对象 以key value的方式来保存数据 XMLHttpRequest对象可以轻松的表单对象发送的服务器端 1 使用构造