NodeJs实战-Express构建照片存储网站(3)-下载图片

news/2024/5/20 5:35:18/文章来源:https://blog.csdn.net/modelmd/article/details/128045014

NodeJs实战-Express构建照片存储网站3-下载图片

  • 页面增加下载链接
  • 增加下载对应的路由
  • 效果图
  • 项目地址

页面增加下载链接

  1. 修改 index.ejs 视图文件增加链接标签 a
<!DOCTYPE html>
<html><head><title><%= title %></title><link rel='stylesheet' href='/stylesheets/style.css' /></head><body><h1><%= title %></h1><a href="/photo/upload">点击上传</a><p>照片存储应用</p><div id="photos"><% data.forEach(item => { %><div class="photo"><h2><%=item.name%></h2><a href="/photo/download?fileName=<%=item.file_name%>"><img src='<%=item.path%>'/></a></div><%})%></div></body>
</html>

当点击a标签的时候,浏览器就会请求 /photo/download 接口

增加下载对应的路由

修改 photo.js 增加下载的路由

router.get('/download', function (req, res, next) {var filePath = destpath + req.query.fileName;if (fs.existsSync(filePath)) {var absPath = path.resolve(filePath);res.download(absPath);} else {res.send('文件不存在');}
});
  1. 先判断文件是否存在
  2. 如果文件存在,获取文件的绝对路径
  3. 输出文件到浏览器

思考: 如果将 res.download(absPath); 修改成 res.sendFile(absPath);,还能下载到文件吗?

  1. 完整的 photo.js
var express = require('express');
var router = express.Router();
var multiparty = require('multiparty');
var path = require('path');
var fs = require('fs');
var silly = require('silly-datetime');
var destpath = "./public/images/";
var urlpath = "/images/";/* GET photo page. */
router.get('/', function (req, res, next) {let arr = fs.readdir(destpath, function(err, files) {if (err) {console.log('读取文件夹错误:', err);} else {var photos = [];files.forEach(fileName => {let item = {'name':'','path':'','file_name':''};item.name = findFileName(fileName);item.path = urlpath + fileName;item.file_name = fileName;photos.push(item);});res.render('photos', { title: 'Photos', data: photos });}});
});router.get('/upload', function (req, res, next) {res.render('photos/upload', { title: '图片上传' });
});router.post('/submit', function (req, res, next) {var form = new multiparty.Form();form.encoding = 'utf-8';form.uploadDir = destpath;form.maxFilesSize = 20 * 1024 * 1024;form.parse(req, (err, fields, files) => {if (err) {console.log('解析上传文件错误:', err);} else {var originalFilename = files.file[0].originalFilename;var fileType = findFileType(originalFilename);var fileName = originalFilename;if (fields.name != null) {fileName = fields.name[0] + fileType;}var uploadedPath = files.file[0].path;var newFileName = destpath + formatDate(new Date()) + "_" + fileName;fs.rename(uploadedPath, newFileName, (err) => {if (err) {console.log('重命名文件错误:', err);}res.redirect('/photo');});}});});router.get('/download', function (req, res, next) {var filePath = destpath + req.query.fileName;if (fs.existsSync(filePath)) {var absPath = path.resolve(filePath);res.download(absPath);} else {res.send('文件不存在');}
});function findFileType(originalFilename) {var lastIndex = originalFilename.lastIndexOf('.');if (lastIndex != -1) {return originalFilename.substring(lastIndex);}return originalFilename;
}function findFileName(inputFileName) {var lastIndex = inputFileName.lastIndexOf('.');if (lastIndex != -1) {return inputFileName.substring(0, lastIndex);}return inputFileName;
}function formatDate(date) {if (date == null) {return "";}return silly.format(date, 'YYYYMMDD-HHmmss');
}module.exports = router;

效果图

启动服务之后,点击图片,就可以下载输出图片
在这里插入图片描述

项目地址

https://gitee.com/3281328128/photo/tree/master/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_893538.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电商小学期 - 智能家居网站结项报告

前言&#xff1a; 「 Design & Build 」 三个专业三个方向&#xff0c;共同完成一个项目&#xff0c;分别为&#xff1a; 物联网 数据库的搭建及管理员相关 电管 硬件设施的实现 电商 用户方面的前后端 在本次项目开发中&#xff0c;自身经历了从0到对前后端…

httpd加DNS搭建Web网站访问,添加虚拟目录访问

安装httpd yum install httpd -y 配置httpd.conf&#xff0c;添加或修改一下配置 vim /etc/httpd/conf/httpd.conf Listen 80 ServerName www.studylinux.con:8080 DocumentRoot "/var/www/html" DirectoryIndex index.html index.html.var创建主页文件&#xff0c;并…

京东一面,面试官问我如何用 Nginx 禁止国外 IP 访问网站,我直接凉凉!

上周去京东面试了&#xff0c;本来觉得自己准备好好的&#xff0c;多数面试问题都回答的比较流畅&#xff0c;有时候甚至觉得自己已经可以和面试官谈笑风生了&#xff0c;结果接下来的一个问题直接把我拍死在凳子上。 问&#xff1a; 我在看 Nginx 访问日志的时候&#xff0c…

宝塔面板网站上传成功文件内无显示问题

在刚安装完宝塔面板并用其建站时有时会出现文件系统无显示问题&#xff0c;处理方式很简单如下&#xff1a; 等修复完成问题得到解决

C# 网站 获取客户端IP地址详细信息

IP地址详情 /// <summary> /// 获取web客户端ip地址详细信息 /// </summary> /// <returns></returns> public static string GetClientIPKLocationKV() {string ret string.Empty;string LocationKV string.Empty;List<string> KVs new List…

将网页/网站嵌入再SAP GUI主屏幕

Note 1387086 - HTML viewer in SAP Easy Access screen 将网页/网站嵌入再SAP GUI主屏幕 步骤: 1,Tcode:SM30->表/视图:SSM_CUST 2,新增/修改:名称:SESS_URL 值:要嵌入的 网页/网站 地址。 3,效果 修改前

将PHP做的web网站封装成桌面客户端,也可将打包成安装文件

电脑需要安装node.js。 1:npm install nativefier -g #安装nativefier 2:输入nativefier检测是否安装成功 3:nativefier --name "YouForever" "http://www.xxxx.cn" #生成程序,YouForever是自定义名字 4&#xff1a;完成 官网https://www.npmjs.…

chrome无法从该网站添加应用、扩展程序和用户脚本

问题&#xff1a; 为chrome添加infinity插件时提示无法从该网站添加应用、扩展程序和用户脚本 解决方法&#xff1a; 1、在地址栏输入&#xff1a;chrome://flags/#extensions-on-chrome-urls并按回车键 2、在Extensions on chrome:// URLs选项选择Enabled 3、在弹出框选择rel…

易优(eyoucms)CMS网站搬家教程

1、网站数据备份 进入网站网站后台-更多功能-备份还原&#xff1b;选择全部数据表单&#xff0c;然后点击数据备份&#xff0c;等待备份完成&#xff0c;然后进行下一步&#xff1b; 2、查看网站程序所使用的版本号 进入你的服务器或者虚拟主机&#xff0c;找到网站根目录&…

人人站CMS模板安装后打开网站报错如何解决?

各位站长如果安装模板后遇到网站如上图错误&#xff0c;首先要打开系统调试模式查看是什么原因导致。 打开调试模式步骤&#xff1a; 1.找到模板根目录找到文件 .env 2.将第一行修改为&#xff1a;APP_DEBUG true 3.重新访问网站就能看到真实错误了。可以复制错误到百度搜…

人人站CMS-备案号等网站公共信息修改了,但前台页面没改过来怎么处理

最近收到不少新手站长反馈&#xff1a;例如 备案号&#xff0c;网站标题&#xff0c;logo等等修改了但前台没更新。 一般出现这个情况有两个原因&#xff1a; 1.后台修改后没有清理缓存(这一点大家基本都知道&#xff0c;往往遇到是第二点) 2.不同模板页面调取使用“站点设置”…

人人站CMS更新工业和生物科技类网站模板

本周&#xff0c;我们更新了两种不同行业的模板&#xff0c;分别是压缩干燥机设备类、生物科技保健品类。一起看一下吧&#xff01; 模板一&#xff1a;压缩干燥机设备类 此模板以白色为主基调&#xff0c;辅以黑红配色&#xff0c;简洁明快&#xff0c;结构分明&#xff01;…

网站手机模板

实用的装修装饰企业网站手机模板&#xff0c;手机版装修工程公司网站模板。主要页面有&#xff1a;品牌介绍、装修风格、设计团队、装修百科、促销活动、客户服务、视频展区、五星工程、联系我们等总共14个页面html下载。 模版来源&#xff1a;http://sc.dede58.com/wapsc/sjmb…

给大家介绍几个PPT网站

一、无忧PPThttp://www.51ppt.com.cn/top_rank/welcome.html 这是一个综合性的PPT网站&#xff0c;在里面不仅有海量好看的PPT模板&#xff0c;而且还有制作PPT时需要的素材、图标等等&#xff0c;还是免费的哟~ 二&#xff0c;优品PPThttp://www.ypppt.com/一个有情怀的免费…

模仿CSDN网站——环境搭建

一、git clone代码 在码云上创建开源项目CSDN2&#xff0c;点击“克隆/下载”&#xff0c;选择HTTPS方式&#xff0c;赋值链接&#xff0c;然后在本地git clone代码。 二、安装vue-cli 选中CSDN2项目文件夹&#xff0c;右键Git Bash here&#xff0c;执行以下操作&#xff1a…

模仿CSDN网站——Element-UI安装

Element-UI官网地址&#xff1a;https://element.eleme.cn/#/zh-CN 一、安装 在项目根目录下运行 npm i element-ui -S 二、完整引入 在main.js中写入以下内容&#xff1a; import Vue from vue; import ElementUI from element-ui; import element-ui/lib/theme-chalk/in…

网站搭建:CSS之布局

CSS在整个网站搭建过程中起到了布局和修饰的重要作用&#xff0c;如果把一个网页比作是一个人&#xff0c;那么HTML算是肌肉&#xff0c;JavaScript负责了其中血液的作用&#xff0c;而CSS则通过大量的属性负责了网页的骨骼和皮肤两项功能 这里先把CSS的布局或者网页骨骼的功能…

大型网站架构体系的演变

互联网上有很多关于网站架构的各种分享&#xff0c;有些主要是从运维和基础架构的角度去分析的&#xff08;堆机器&#xff0c;做集群&#xff09;&#xff0c;太关注技术细节实现&#xff0c;普通的开发人员基本看不太懂。 本文上篇将主要介绍大型网站基础架构的扩展&#xff…

网站链接iframe其他网站时跨域了,报错x-Frame-Options to sameorigin

报错&#xff1a; 页面允许被跨域访问 1、settings配置 # 页面允许被跨域访问 X_FRAME_OPTIONS ALLOWALL 2、python源码改动 C:\Python27\Lib\site-packages\django\middleware\clickjacking.py

linux学习网站大全[转]

http://www-128.ibm.com/developerworks/cn/linux/ Linuxsir&#xff0d;非常不错的中文Linux社区&#xff0c;能学习到很多东西http://www.linuxsir.com/bbs Linuxfans&#xff0d;Linux公社&#xff0c;中文站点&#xff0c;国内非常出名http://www.linuxfans.org Linuxeden…