express+宝塔实现文件上传服务

文章目录

    • 服务器部分
      • 开启存放文件的端口
      • 配置nginx该端口入口
      • 手动在/www/wwwroot/file目录下存放一张图片进行访问
    • express接口部分
      • 代码
      • 测试

服务器部分

开启存放文件的端口

我这里以83为例
先到对应的服务商开启端口,比如我这里是阿里云
在这里插入图片描述
测试,比如这里我开启了86端口,但是没有开启87端口,效果如下
在这里插入图片描述

配置nginx该端口入口

我这里以宝塔为例
在这里插入图片描述
测试,这个时候访问ip+port可以看到如下
在这里插入图片描述

如果你使用在服务器手动修改nginx配置文件的话,可以自行百度如何开放端口

手动在/www/wwwroot/file目录下存放一张图片进行访问

比如我有一个资源是/www/wwwroot/file/1718075066607-794279070.png

那么访问ip:port/1718075066607-794279070.png即可成功访问

express接口部分

代码

我这里是routes和controller分开写的,也可以合并到一起

// routes部分

const express = require("express");
const controller = require("../controllers/upload");
const router = new express.Router();

const multer = require("multer");
const path = require("path");
const fs = require("fs");

// 设置Multer存储引擎
const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    const uploadPath = path.join("/www/wwwroot/file");
    // 检查目标目录是否存在,不存在则创建
    if (!fs.existsSync(uploadPath)) {
      fs.mkdirSync(uploadPath, { recursive: true });
    }
    cb(null, uploadPath);
  },
  filename: (req, file, cb) => {
    const uniqueName =
      Date.now() +
      "-" +
      Math.round(Math.random() * 1e9) +
      path.extname(file.originalname);
    cb(null, uniqueName);
  },
});

const upload = multer({ storage: storage });

router.post("/img", upload.single("file"), controller.imgHandler);

module.exports = router;

// controller部分

const configObj = require("../common/config");

const imgHandler = (req, res) => {
  const file = req.file;

  if (!file) {
    return res.fail("上传失败!");
  }

  // 构造文件URL
  const fileUrl = `http://${configObj.host}:83/${file.filename}`;

  // 返回文件URL和成功消息
  res.success(fileUrl);
};

exports.imgHandler = imgHandler;

// app.js中进行注册

app.use("/upload", uploadRouter);

测试

访问接口ip:port/upload/img

{
    "code": 200,
    "msg": "success",
    "data": "ip:port/1717746235639-944725765.png"
}

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

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

相关文章

大模型基础——从零实现一个Transformer(3)

大模型基础——从零实现一个Transformer(1)-CSDN博客 一、前言 之前两篇文章已经讲了Transformer的Embedding,Tokenizer,Attention,Position Encoding, 本文我们继续了解Transformer中剩下的其他组件. 二、归一化 2.1 Layer Normalization layerNorm是针对序列数据提出的一种…

如何掌握多门编程语言?

我的答案是:掌握学习新编程语言的能力。 授之以鱼不如授之以渔 对于一个编程老手来说,学习新的编程语言应该很容易。他们只需要一个周末甚至是几个小时就可以开始用新学的编程语言写代码了。优秀的程序员可以为了完成某个任务使用任何一门编程语言。毕…

UE5 Sequencer 使用指导 - 学习笔记

https://www.bilibili.com/video/BV1jG411L7r7/?spm_id_from333.337.search-card.all.click&vd_source707ec8983cc32e6e065d5496a7f79ee6 Sequencer 01 1.1 调整视口 调整窗口数量 调整视口类型为Cinematic视口 视口显示网格,或者条件参考线 1.2 关卡动画与…

探索工厂智能制造解决方案的革新与应用

随着工业4.0时代的到来,工厂智能制造解决方案正在以前所未有的速度和规模改变着传统制造业的面貌。从自动化生产到智能化管理,工厂智能制造解决方案正在为制造企业带来前所未有的效率提升和竞争优势。本文将深入探讨工厂智能制造解决方案的革新与应用&am…

ANSYS电池包行业结构仿真解决方案

目前动力电池开发中面临的问题: ▪ 性能(能量密度及功率密度) ▪ 耐用性和使用寿命(考虑在不同环境和使用周期) ▪ 安全性(考虑恶劣环境) ▪ 费用成本 ▪ 复杂的多尺度、多物理场系统 ▪ 快速发展的材料和设计理念 ▪ 现有软件工具局限性 目录 1. 动力电池开…

Python 制作词云图

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

VM ubuntu终端使用Host代理的方法

1、设置网络地址转换NAT 2、在终端敲击如下命令 先敲击 ip route show 找到网关。再敲击如下命令: export http_proxyhttp://10.0.2.2:33210 export https_proxyhttp://10.0.2.2:33210 export HTTP_PROXYhttp://10.0.2.2:33210/ export HTTPS_PROXYhttp://10.0.2.…

“探索AIGC市场:腾讯元宝APP加入竞争,大模型产品的未来走向与个人选择“

文章目录 每日一句正能量前言使用体验分享独特优势和倾向选择字节豆包百度文心一言阿里通义千问腾讯元宝个人倾向选择结论 未来发展方向技术创新可持续可拓展性用户体验应用场景政府赋能数据安全与隐私保护伦理与社会责任国际合作与竞争结论 后记 每日一句正能量 不管现在有多么…

小程序视图渲染数据和部分事件的绑定

今天依旧使用这个目录进行教学 数据的渲染 在 index.js的 page中定义一个data对象结构是这样的 Page({data:{name:张三} }) 在index.wxml 中 利用模板语法进行渲染 <view >{{name}}</view> 注意这个模板里边不能使用js的方法 要循环渲染数组&#xff0c;如 在…

AIGC简介

目录 1.概述 2.诞生背景 3.作用 4.优缺点 4.1.优点 4.2.缺点 5.应用场景 5.1.十个应用场景 5.2.社交媒体内容 6.如何使用 7.未来展望 8.总结 1.概述 AIGC 是“人工智能生成内容”&#xff08;Artificial Intelligence Generated Content&#xff09;的缩写&#x…

vue element-ui 下拉框 以及 input 限制输入,小数点后保留两位 界面设计案例 和 例子:支持mp4和m3u8视频播放

vue input 限制输入&#xff0c;小数点后保留两位 以及 图片垂直居中显示 和 分享 git 小技巧-CSDN博客文章浏览阅读430次&#xff0c;点赞5次&#xff0c;收藏4次。error:Your local changes to the following files would be overwritten by merge:_error: your local change…

VS Code扩展开发介绍和快速示例

VS Code 介绍 VS Code&#xff08;Visual Studio Code&#xff09;是一款由微软开发的轻量级的免费开源的源代码编辑器&#xff0c;它支持多种操作系统&#xff0c;包括Windows、macOS和Linux。以下是对VS Code的详细介绍&#xff1a; 一、跨平台支持 VS Code是一个真正的跨…

阅读源码解析dynamic-datasource-spring-boot-starter中是如何动态切换数据源的

dynamic-datasource-spring-boot-starter是苞米豆提供的一个动态切换数据源的工具&#xff0c;可以帮助企业或者个人实现多数据源的切换&#xff0c;这里通过阅读源码的方式解析是如何动态的切换数据源的&#xff0c;采用的版本是3.5.1 源码解析 通过官方文档可以看到&#x…

HTML制作一个太阳、地球、月球之间的绕转动画

大家好&#xff0c;今天制作一个太阳、地球、月球之间的绕转动画&#xff01; 先看具体效果&#xff1a; 要制作一个太阳、地球、月球之间的绕转动画&#xff0c;我们需要结合HTML、CSS和JavaScript。由于CSS动画和JavaScript动画各有优缺点&#xff0c;这里我将给出一个使用…

LCD电子广告牌课程设计

概述 1.1课程设计简介 亮丽实用的广告牌可以给我们的生活添加光彩、可以给店铺招揽生意。传统的广告牌都是固定的汉字&#xff0c;并且时间长了会掉色&#xff0c;使汉字模糊难认&#xff0c;这就给我的生活带来很多的不便。尤其到了晚上传统广告牌就会失去其该有的作用。所以在…

空山新雨后-故事和场景搭建(一)

1、关于故事 1.故事的灵感 2.故事的表线 3.故事的里线 4.故事的参考图 5.故事的资源 6.关于音乐,听了100多首音乐选出来的 2、场景搭建 1.放入HDRI,放入PostProcessVolumn,将PostProcessVolumn设置为无限范围,将曝光补偿、Min EUV、Max EUV都设置为0,

SpringBoot Vue Bootstrap 旅游管理系统

SpringBoot Vue 旅游管理系统源码&#xff0c;附带环境安装&#xff0c;运行说明 源码地址 开发环境 jdk1.8,mysql8,nodejs16,navicat,idea 使用技术springboot mybatis vue bootstrap 部分功能截图预览

投稿要求的Cover Letter该怎么写?附全文模版+例句

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 投稿时提交的Cover letter&#xff0c;是作者写给期刊编辑的信&#xff0c;编辑在看完你的cover letter之后&#xff0c;再决定是否继续看全文。Cover Letter不会随正文一起发…

零基础直接上手java跨平台桌面程序,使用javafx(五)TableView显示excel表

我们在窗口的中间加上TableVie&#xff1a; 在hello-view.fxml的文本中&#xff0c;要增加一些代码。在TableView定义中加上fx:id"TableView1"&#xff0c;这样java代码才方便访问&#xff0c;在java代码中要加上FXML private TableView TableView1;表示定义TableVie…

JDBC开发之四大核心API:DriverManager Connection Statement ResultSet

DriverManager 方法都是静态的 注册驱动 在Mysql5之后我们就不用注册驱动了 在jar包里已经写好了 读取文件 第二个方法 如果连接的是主机mysql并且端口是默认的3306 则可以简化书写 代码书写 import java.sql.Connection; import java.sql.DriverManager; import java.sql.S…