springboot 上传文件/图片到本地文件夹,利用nginx可以采用地址打开该文件

news/2024/5/17 22:37:04/文章来源:https://blog.csdn.net/H_Q_Li/article/details/126977363

springboot 上传文件/图片到本地文件夹,利用nginx可以采用地址打开该文件

步骤:

一、下载nginx

在这里插入图片描述打开nginx.conf 文件,配置nginx

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
启动nginx在nginx.exe文件所在的文件夹路径上直接cmd,输入nginx.exe即可启动nginx
注意:要是先启动了nginx,直接关了cmd窗口,你以为nginx关闭了,其实没有,这个时候如果修改了nginx.conf文件的内容,需要重新在nginx.exe所在的目录上输入cmd ,然后输入 nginx.exe -s reload即可!!!!

二、springboot 代码

1、application.yml

upload:path: G:\\yougong\\chery-file   # 文件保存的路径 和 nginx.conf 保持一致reUrl: localhost:8013 # nginx的访问ip和端口 和 nginx.conf 保持一致

2、读取yml文件的内容

@Configuration
public class UploadConfig {public static String path;public static String reUrl;@Value("${upload.path}")public void setPath(String path) {UploadConfig.path = path;}@Value("${upload.reUrl}")public void setReUrl(String reUrl) {UploadConfig.reUrl = reUrl;}
}

3、写一个文件工具类

package com.yougong.admin.utils;import java.io.*;
import java.util.UUID;public class FileUtils {/*** 写入文件 未分块上传* 采用MultipartFile接收上传文件并使用FileOutputStream写入文件** @param target* @param src* @throws IOException*/public static void write(String target, InputStream src) throws IOException {OutputStream os = new FileOutputStream(target);byte[] buf = new byte[1024];int len;while (-1 != (len = src.read(buf))) {os.write(buf, 0, len);}os.flush();os.close();}/*** 分块写入文件* 采用MultipartFile接收上传文件的分块文件,上传参数包括:size:文件大小,chunk:分块号,chunks:总分块数** @param target* @param targetSize* @param src* @param srcSize* @param chunks* @param chunk* @throws IOException*/public static void writeWithBlcok(String target, Long targetSize, InputStream src, Long srcSize, Integer chunks, Integer chunk) throws IOException {RandomAccessFile randomAccessFile = new RandomAccessFile(target, "rw");randomAccessFile.setLength(targetSize);if (chunk == chunks - 1) {randomAccessFile.seek(targetSize - srcSize);} else {randomAccessFile.seek(chunk * srcSize);}byte[] buf = new byte[1024];int len;while (-1 != (len = src.read(buf))) {randomAccessFile.write(buf, 0, len);}randomAccessFile.close();}/*** 生成随机文件名** @return*/public static String generateFileName() {return UUID.randomUUID().toString();}
}

4、controller层

package com.yougong.admin.controller;
import com.yougong.admin.config.UploadConfig;
import com.yougong.admin.service.FileService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;@RestController
@RequestMapping("/file")
public class FileController {@Autowiredprivate FileService fileService;@PostMapping("/upload")public String upload(MultipartFile file) throws IOException {String fileExt = this.getExtName(file.getOriginalFilename());String fileName = System.currentTimeMillis() + "." + fileExt;fileService.upload(file, fileName);String filePath = "/" + fileName;String url = UploadConfig.reUrl + filePath;System.out.println("返回地址:"+url);//一次性上传多张的时候最好加上这个//Thread.sleep(500);return url;}private String getExtName(String fileName) {String fullName = fileName.toLowerCase();int dotIndex = fullName.lastIndexOf(".");return dotIndex == -1 ? "" : fileName.substring(dotIndex + 1);}
}

5、service层:


package com.yougong.admin.service;import org.springframework.web.multipart.MultipartFile;import java.io.IOException;public interface FileService {void upload(MultipartFile file, String fileName) throws IOException;
}

实现类:

package com.yougong.admin.service.impl;import cn.hutool.core.io.FileUtil;
import com.yougong.admin.config.UploadConfig;
import com.yougong.admin.service.FileService;
import com.yougong.admin.utils.FileUtils;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;@Service
public class FileServiceImpl implements FileService {@Overridepublic void upload(MultipartFile file, String fileName) throws IOException {System.out.println("UploadConfig.path + path:"+ UploadConfig.path );//创建目录FileUtil.mkdir(UploadConfig.path );String newPath = UploadConfig.path  + "\\"+fileName;FileUtils.write(newPath, file.getInputStream());}
}

6、测试:
postman发送文件进行测试:
在这里插入图片描述
网页查看:
在这里插入图片描述成功!!!
文件夹查看:这个就是我们在nginx.conf文件里面配置的路径
在这里插入图片描述成功!!!

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

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

相关文章

企业运营管理 | 如何用「内容」取胜营销战?

全媒体时代,舆论生态、媒体格局、传播方式日新月异,但「内容为王」始终是品牌营销增长的公认规则。 除了投放渠道多、内容更新频次快、跨地域运营等挑战,如何规模化地输出统一的、优质的内容,以此驱动品牌增长,成为品牌…

u盘部分文件无故消失该怎么办?

u盘属于移动存储设备,用于备份数据,方便携带。可以存放各种格式的数据、文档、音频、视频、图片,即插即用,随时拔下。这给了我们极大地便利。但是我们在使用u盘的时候偶尔会出现一些意外,比如u盘文件没删除却消失了&am…

数据分析案例-基于sklearn随机森林算法探究影响预期寿命的因素

目录 项目目标 导入数据 查看数据基本信息 数据预处理 数据可视化 特征工程 建模 项目目标 **探索影响预期寿命的因素** 世卫组织建立了一段时间内所有国家健康状况的数据集,其中包括预期寿命,成人死亡率等方面的统计数据。使用此数据集&#xff…

Panama-FFI实现原理与移植

移植FFI 在说明如何对FFI进行移植之前需要先说明FFI的实现原理。JEP424是外部函数访问+本地内存,但是实际上需要移植的内容只有外部函数访问,对于本地内存的操作并不需要修改。 从java中调用native方法叫做downcall,而从native方法中调用java方法叫做upcall,下面通过downca…

泰克示波器知识分享-波的类型

提到泰克示波器,相信大多数人都知道,那大家对示波器基础知识了解多少呢?今天安泰测试就给大家分享一波干活——波的类型介绍: 您可以把大多数波分成下面几类: 周期信号和非周期信号 重复的信号称为周期信号,一直变化的信号则称为…

基于Android studio有声听书系统 java音乐播放器系统

1:注册登录:未注册用户首先进行账号注册,注册成功后进行登录,已注册用户直接输入账号密码进行登录,登录成功后进入主页面。 2:主页面:通过左右滑动可以实现对推荐界面、订阅界面、历史界面的切换…

第三章流程控制语句

一、判断输入的是不是黄蓉所说的数 二、验证瑛姑给出的答案是否正确 三、输出玫瑰花语 四、判断是否为酒后驾车 五、助力瑛姑(1):while循环版解题法 六、助力瑛姑(2):for循环版解题法七、打印九九乘法表 八、助力瑛姑(3):for循环改进版解题法 九、逢七拍腿游戏 十…

基于ssm的网上招投标系统设计与实现-计算机毕业设计源码+LW文档

开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:…

bean的作用域、bean的生命周期、bean的后置处理器

bean的作用域 概念:在Spring中可以通过配置bean标签的scope属性来指定bean的作用域范围,取值含义如下所示: 如果是在WebApplicationContext环境下还会有另外两个作用域(不常用) 在resources目录下创建spring-scope.xml文件 在test的java下创…

【区块链 | IPFS】如何将域链接到 IPFS 上托管的 dApp?

这是一篇关于如何将域链接到托管在IPFS上的dApp的快速分步指南 这是一篇关于如何将域链接到托管在IPFS上的dApp的快速分步指南 步骤1: 在本教程中,我们将把一个传统的域名连接到一个托管在IPFS上的dApp。 将在这个CID下使用IPFS托管的dApp: https://ipfs.io/ipfs/QmYupN…

红红火火过大年

3. axios特点 axios七大特点 1、在浏览器中发送 XMLHttpRequests 请求; 2、在 node.js 中发送 http请求; 3、基于 promise 的 HTTP 库,支持promise所有的API 4、拦截请求和响应;(修改请求数据,只能用’PUT…

第一章:PyTorch简介和安装

1、什么是PyTorch? PyTorch是由Facebook人工智能研究小组开发的一种基于Lua编写的Torch库的Python实现的深度学习库,目前被广泛应用于学术界和工业界。 2、PyTorch的安装 PyTorch的安装可以分解为三个程序的安装:Anaconda PyTorch IDE(1)Anaconda的安装 Anaconda集成了常用…

【SQL刷题】DAY19----SQL联结表专项练习

博主昵称:跳楼梯企鹅 创作初心:本博客的初心为与技术朋友们相互交流,每个人的技术都存在短板,博主也是一样,虚心求教,希望各位技术友给予指导。 博主座右铭:发现光,追随光&#xff0…

Codeforces Round #821 (Div. 2)(A~E)

A. Consecutive Sum 最多可以进行k次操作,每次操作可以将两个对k取模相等的下标对应的元素交换位置,问做完这些操作之后每连续的k个数中,最大的和是多少。 思路:数据范围很小,直接对于所有对k取模相等的数进行比较&am…

RabbitMQ linux 安装

1、下载 erlang-23.2.3-1.el7.x86_64.rpm 2. 输入:rpm -ivh erlang-23.2.3-1.el7.x86_64.rpm 安装。 3、安装 RabbitMQ 下载网址:下载rabbitmq-server-3.9.14-1.el8.noarch.rpm与rabbitmq-server-3.9.14-1.el8.noarch.rpm.asc。Installing on RPM-bas…

基于改进遗传算法求解 TSP/MTSP 【旅行推销员问题 (TSP)、多旅行推销员问题 (M-TSP) 】(Matlab代码实现)

目录 1 概述 2 旅行商问题 3 遗传算法 4 约束优化 5 带有罚方法的遗传算法的流程图 6 带有惩罚函数的遗传算法在TSP中的应用 7 运行结果 7.1 单旅行商问题 7.2 多旅行商问题 8 Matlab代码实现 9 参考文献 10 写在最后 1 概述 主要研究用遗传算法解决带有约束的TSP…

kafka和flink的入门到精通 4 生产数据流程

参考023 - 大数据 - Kafka - 生产者 - 生产数据的准备_哔哩哔哩_bilibili 链接:https://pan.baidu.com/s/1QMOJVkRy4nKkjzoDryvQXw 提取码:fcoe 本文接着上一篇kafka和flink的入门到精通 3 组件扩展,kafka-生产者_水w的博客-CSDN博客 目录 …

今天是虚拟机

乌班图打开终端的方法ctrl+alt+t 接下来就是关于使用xftp来实现连接虚拟机 这儿就拿重点来讲一下 获取虚拟机的ip地址 通过打开虚拟机的终端(别的虚拟机如何打开不清楚,但是这个打开的方法我放在上面) 输入ifconfig,如果非虚拟机的话就输入ipconfig 如果没有显示虚拟机的ip…

net二手手帐

开发工具(eclipse/idea/vscode等):vs2017 数据库(sqlite/mysql/sqlserver等):sqlserver 功能模块(请用文字描述,至少200字):本网站的基本内容是设计并实现一个二手手帐文具交易网,手帐文具爱好者们可以足不出户地交易自…

基于StarterWare的TMS320C6748裸机程序开发入门详解教程

LED裸机程序开发 本小结将讲解如何利用TI提供的StarterWare软件包开发一个基于DSP C6748的LED流水灯程序,以及如何查找芯片的技术参考手册和数据手册。文章内容主要涵盖LED裸机程序开发、工程建立、添加头文件和库文件、源代码编写和解析和按键中断裸机程序演示和解析等。 关…