千家信息网

怎么在SpringBoot中使用nginx实现资源上传功能

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,怎么在SpringBoot中使用nginx实现资源上传功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。配置修改 /us
千家信息网最后更新 2026年10月31日怎么在SpringBoot中使用nginx实现资源上传功能

怎么在SpringBoot中使用nginx实现资源上传功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

配置

修改 /usr/nginx/conf/nginx.conf :

server { listen  9090; server_name localhost; location ~ .(jpg|png|jpeg|gif|bmp)$ { #可识别的文件后缀 root /usr/nginx/image/; #图片的映射路径  autoindex on; #开启自动索引 expires 1h; #过期时间 } location ~ .(css|js)$ {  root /usr/nginx/static/;  autoindex on;  expires 1h; }  location ~ .(AVI|mov|rmvb|rm|FLV|mp4|3GP)$ {  root /usr/nginx/video/;  autoindex on;  expires 1h; }

该修改的修改,该增加的增加,切记勿乱删

最后一步,启动nginx,执行 ./usr/nginx/sbin/nginx

到这里服务器nginx就准备可以了

你可以试下在 /usr/nginx/image 下放图片01.jpg,然后在本地 http://ip:9090/01.jpg 看看图片能否访问到

2. SpringBoot 实现资源的上传

pom.xml:

 org.springframework.boot spring-boot-starter-parent 2.1.7.RELEASE   org.springframework.boot  spring-boot-starter-web  2.1.7.RELEASE    org.springframework.boot  spring-boot-starter-test  2.1.7.RELEASE  test     org.apache.commons  commons-lang3  3.8.1    org.apache.commons  commons-io  1.3.2    commons-net  commons-net  3.6     commons-fileupload  commons-fileupload  1.3.3    org.projectlombok  lombok  1.16.22    com.jcraft  jsch  0.1.54    joda-time  joda-time  2.10.3 

appilcation.yml:

ftp: host: 自己服务器ip userName: 服务器账号 password: 服务器密码 port: 22 rootPath: /usr/nginx/image img: url: http://ip:9090/  # ftp.img.url 可以不添加,这里只是为了上传文件成功后返回文件路径

工具类 FtpUtil.class:

import com.jcraft.jsch.*;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Component;import java.io.InputStream;import java.util.Properties;@Componentpublic class FtpUtil { private static Logger logger = LoggerFactory.getLogger(FtpUtil.class); /**  * ftp服务器ip地址  */ private static String host; @Value("${ftp.host}") public void setHost(String val){  FtpUtil.host = val; } /**  * 端口  */ private static int port; @Value("${ftp.port}") public void setPort(int val){  FtpUtil.port = val; } /**  * 用户名  */ private static String userName; @Value("${ftp.userName}") public void setUserName(String val){  FtpUtil.userName = val; } /**  * 密码  */ private static String password; @Value("${ftp.password}") public void setPassword(String val){  FtpUtil.password = val; } /**  * 存放图片的根目录  */ private static String rootPath; @Value("${ftp.rootPath}") public void setRootPath(String val){  FtpUtil.rootPath = val; } /**  * 存放图片的路径  */ private static String imgUrl; @Value("${ftp.img.url}") public void setImgUrl(String val){  FtpUtil.imgUrl = val; } /**  * 获取连接  */ private static ChannelSftp getChannel() throws Exception{  JSch jsch = new JSch();  //->ssh root@host:port  Session sshSession = jsch.getSession(userName,host,port);  //密码  sshSession.setPassword(password);  Properties sshConfig = new Properties();  sshConfig.put("StrictHostKeyChecking", "no");  sshSession.setConfig(sshConfig);  sshSession.connect();  Channel channel = sshSession.openChannel("sftp");  channel.connect();  return (ChannelSftp) channel; } /**  * ftp上传图片  * @param inputStream 图片io流  * @param imagePath 路径,不存在就创建目录  * @param imagesName 图片名称  * @return urlStr 图片的存放路径  */ public static String putImages(InputStream inputStream, String imagePath, String imagesName){  try {   ChannelSftp sftp = getChannel();   String path = rootPath + imagePath + "/";   createDir(path,sftp);   //上传文件   sftp.put(inputStream, path + imagesName);   logger.info("上传成功!");   sftp.quit();   sftp.exit();   //处理返回的路径   String resultFile;   resultFile = imgUrl + imagePath + imagesName;   return resultFile;  } catch (Exception e) {   logger.error("上传失败:" + e.getMessage());  }  return ""; } /**  * 创建目录  */ private static void createDir(String path,ChannelSftp sftp) throws SftpException {  String[] folders = path.split("/");  sftp.cd("/");  for ( String folder : folders ) {   if ( folder.length() > 0 ) {    try {     sftp.cd( folder );    }catch ( SftpException e ) {     sftp.mkdir( folder );     sftp.cd( folder );    }   }  } } /**  * 删除图片  */ public static void delImages(String imagesName){  try {   ChannelSftp sftp = getChannel();   String path = rootPath + imagesName;   sftp.rm(path);   sftp.quit();   sftp.exit();  } catch (Exception e) {   e.printStackTrace();  } }}

工具类IDUtils.class(修改上传图片名):

import java.util.Random;public class IDUtils { /**  * 生成随机图片名  */ public static String genImageName() {  //取当前时间的长整形值包含毫秒  long millis = System.currentTimeMillis();  //加上三位随机数  Random random = new Random();  int end3 = random.nextInt(999);  //如果不足三位前面补0  String str = millis + String.format("d", end3);  return str; }}

NginxService.class:

import com.wzy.util.FtpUtil;import com.wzy.util.IDUtils;import lombok.extern.slf4j.Slf4j;import org.joda.time.DateTime;import org.springframework.stereotype.Service;import org.springframework.web.multipart.MultipartFile;import java.io.IOException;import java.io.InputStream;/** * @Package: com.wzy.service * @Author: Clarence1 * @Date: 2019/10/4 21:34 */@Service@Slf4jpublic class NginxService { public Object uploadPicture(MultipartFile uploadFile) {  //1、给上传的图片生成新的文件名  //1.1获取原始文件名  String oldName = uploadFile.getOriginalFilename();  //1.2使用IDUtils工具类生成新的文件名,新文件名 = newName + 文件后缀  String newName = IDUtils.genImageName();  assert oldName != null;  newName = newName + oldName.substring(oldName.lastIndexOf("."));  //1.3生成文件在服务器端存储的子目录  String filePath = new DateTime().toString("/yyyyMMdd/");  //2、把图片上传到图片服务器  //2.1获取上传的io流  InputStream input = null;  try {   input = uploadFile.getInputStream();  } catch (IOException e) {   e.printStackTrace();  }  //2.2调用FtpUtil工具类进行上传  return FtpUtil.putImages(input, filePath, newName); }}

NginxController.class:

import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.ObjectMapper;import com.wzy.service.NginxService;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.multipart.MultipartFile;import java.util.HashMap;import java.util.Map;@RestController@Slf4jpublic class NginxController { @Autowired private NginxService nginxService; /**  * 可上传图片、视频,只需在nginx配置中配置可识别的后缀  */ @PostMapping("/upload") public String pictureUpload(@RequestParam(value = "file") MultipartFile uploadFile) {  long begin = System.currentTimeMillis();  String json = "";  try {   Object result = nginxService.uploadPicture(uploadFile);   json = new ObjectMapper().writeValueAsString(result);  } catch (JsonProcessingException e) {   e.printStackTrace();  }  long end = System.currentTimeMillis();  log.info("任务结束,共耗时:[" + (end-begin) + "]毫秒");  return json; } @PostMapping("/uploads") public Object picturesUpload(@RequestParam(value = "file") MultipartFile[] uploadFile) {  long begin = System.currentTimeMillis();  Map map = new HashMap<>(10);  int count = 0;  for (MultipartFile file : uploadFile) {   Object result = nginxService.uploadPicture(file);   map.put(count, result);   count++;  }  long end = System.currentTimeMillis();  log.info("任务结束,共耗时:[" + (end-begin) + "]毫秒");  return map; }}

springboot是什么

springboot一种全新的编程规范,其设计目的是用来简化新Spring应用的初始搭建以及开发过程,SpringBoot也是一个服务于框架的框架,服务范围是简化配置文件。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

图片 文件 服务 服务器 路径 工具 文件名 生成 配置 后缀 密码 资源 成功 任务 时间 框架 目录 帮助 功能 原始 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州大一互联网络科技有限公司 科技股互联网 厦门中拓互联网络科技有限公司 盈实互联网科技 深圳科技互联网 狮子座互联网科技有限公司 互联网科技logo设计 火传媒上海互联网科技 互联网科技公司介绍 四川狮子座互联网科技 盛创互联网科技有限公司 济南华为互联网科技产业总部基地 金融科技与互联网金融相同和不同 互联网科技革命什么开始 中国互联网十大科技股排名 中和天地互联网科技有限公司 江苏苏星互联网科技有限公司 张召忠谈中国互联网科技 上海创道互联网络科技有限公司 北京互联网科技类企业分布 博彦科技互联网金融 广州互联网络科技有限公司 睿民互联网科技 广西拼得多互联网科技有限公司 老年人脱离互联网科技的作文 武汉健翔互联网络科技有限公司 东莞新华互联网科技学校 皮皮虾互联网科技有限公司 2021世界互联网领先科技成果发布 萌小萌互联网科技河南有限公司
0