Egg框架搭建后端服务【6】- 上传图片和图片回显

2024-01-25 22:52

本文主要是介绍Egg框架搭建后端服务【6】- 上传图片和图片回显,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

需求

博客系统翻新,需要上传图片的功能,本来想着一起把上传文件做上的,但是目前没太大用处,所以先做一个上传图片。

开发

前端

前端主要是通过 <input type=‘file’ /> 调起图片选择,将选中的图片以 formdata 的方式发送出去。

export function uploadImage(imageFormData, callback) {return request({url: '/upload',method: 'post',data: imageFormData,headers: {'Content-Type': 'multipart/form-data','X-Requested-With': 'XMLHttpRequest'},onUploadProgress(progressEvent) {if (callback) {callback(progressEvent)}}})
} 

server

Node.js 中自带了文件操作的 API,虽然早期非常难用,但是 Node v10 版本以后的还可以。

重点使用的是 fs.promise 的一系列 API。

将文件直接保存到 app/public 下,页面端可以通过反向代理后台接口 127.0.0.1:7002/public 直接获取到文件。

async upload() {const {ctx, app} = this;const fileData = ctx.request.files[0];// 获取当前日期const activeDate = ctx.helper.getNowDate();const uploadFilePath = path.join(__dirname, '../public/' + activeDate + '/');const file = await fsPromises.readFile(fileData.filepath);// 创建日期文件夹if (!fs.existsSync(uploadFilePath)) {await fsPromises.mkdir(uploadFilePath, {recursive: false});}// 生成服务端文件名const newFileName = ctx.helper.snowflakeId() + '.' + ctx.helper.getFileSuffix(fileData.filename);const serverFilePath = uploadFilePath + newFileName;// 保存文件await fsPromises.writeFile(serverFilePath, file);ctx.status = 200;ctx.body = {code: 200,success: true,data: {name: fileData.filename,url: 'http://' + ctx.host + '/public/' + activeDate + '/' + newFileName,},msg: '上传成功',show: true}
}

总结

上传图片的整个过程还是比较顺利的,但是需要注意的是,这里上传文件没有加上中途校验,存在一定的安全风险和隐患。

为了便于文件查阅,加上了按照日期分文件夹存储。

另外对于大文件的上传这里也并没有涉及,断点续传等高阶的内容也没有添加,仅仅是最基础的上传操作。

这篇关于Egg框架搭建后端服务【6】- 上传图片和图片回显的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/644875

相关文章

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因