怎么在SpringBoot中使用nginx实现资源上传功能
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,怎么在SpringBoot中使用nginx实现资源上传功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。配置修改 /us
千家信息网最后更新 2025年01月23日怎么在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
springboot是什么
springboot一种全新的编程规范,其设计目的是用来简化新Spring应用的初始搭建以及开发过程,SpringBoot也是一个服务于框架的框架,服务范围是简化配置文件。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。
图片
文件
服务
服务器
路径
工具
文件名
生成
配置
后缀
密码
资源
成功
任务
时间
框架
目录
帮助
功能
原始
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
消防网络安全知识大赛
网络安全毕业设计选题有哪些
pdo连接数据库失败
湖南郴州安卓软件开发
网络安全靠人民用英语怎么说
电脑服务器系统不支持投屏
网络拓扑结构网络技术
鄞州游戏软件开发服务
数据库系统概论卷子
计算机软件开发规范封面
数据库实用技术李书珍
建党100周年信息网络安全
电脑点击链接显示无法连接服务器
为什么web链接数据库
软件开发工程师提问客户
中国移动服务器修改密码
网络技术精讲
软件开发和工程建设有啥关系
软件开发开公司需要多少钱
派出所网络安全自查整改报告
常用的网络安全日志分析工具
公安部网络安全专家郭局长
服务器内存购买
软件开发的技术难点
神州泰岳网络技术分公司
容器搭建免费邮件服务器
CMD产品软件开发
数据库技术贴吧推荐
科技互联网试题
网络技术方面存在的问题