最近小编在学习使用nginx放置静态资源,例如图片、视频、css/js等,下面就来记录一下一波学习干货。
1.nginx安装及配置
小编使用的服务器是阿里云的轻量应用服务器,系统使用的是Ubuntu。注意记得开放 9090TCP端口,如果不使用 9090端口作为服务器端口也可不用。
安装
首先,获取安装包是必要的吧,这里提供一个nginx-1.11.3-ubuntu.tar.gz https://pan.baidu.com/s/1vvb41QkOJ4VqfyFckXBkjA (密码45wz)
	小编是将安装包放在/usr/nginx 中,进入目录下然后执行 tar -zxvf nginx-1.11.3.tar.gz 进行解压
配置
修改 /usr/nginx/conf/nginx.conf :
| 					1				
 					2				
 					3				
 					4				
 					5				
 					6				
 					7				
 					8				
 					9				
 					10				
 					11				
 					12				
 					13				
 					14				
 					15				
 					16				
 					17				
 					18				
 					19			 | 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:
| 					1				
 					2				
 					3				
 					4				
 					5				
 					6				
 					7				
 					8				
 					9				
 					10				
 					11				
 					12				
 					13				
 					14				
 					15				
 					16				
 					17				
 					18				
 					19				
 					20				
 					21				
 					22				
 					23				
 					24				
 					25				
 					26				
 					27				
 					28				
 					29				
 					30				
 					31				
 					32				
 					33				
 					34				
 					35				
 					36				
 					37				
 					38				
 					39				
 					40				
 					41				
 					42				
 					43				
 					44				
 					45				
 					46				
 					47				
 					48				
 					49				
 					50				
 					51				
 					52				
 					53				
 					54				
 					55			 | <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.7.RELEASE</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.1.7.RELEASE</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><version>2.1.7.RELEASE</version><scope>test</scope></dependency><!-- Apache工具组件 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.8.1</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-io</artifactId><version>1.3.2</version></dependency><dependency><groupId>commons-net</groupId><artifactId>commons-net</artifactId><version>3.6</version></dependency><!-- 文件上传组件 --><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.3</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.22</version></dependency><dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.54</version></dependency><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.10.3</version></dependency></dependencies> | 
appilcation.yml:
| 					1				
 					2				
 					3				
 					4				
 					5				
 					6				
 					7				
 					8			 | ftp:host: 自己服务器ipuserName: 服务器账号password: 服务器密码port: 22rootPath: /usr/nginx/imageimg:url: http://ip:9090/ # ftp.img.url 可以不添加,这里只是为了上传文件成功后返回文件路径 | 
工具类 FtpUtil.class:
| 					1				
 					2				
 					3				
 					4				
 					5				
 					6				
 					7				
 					8				
 					9				
 					10				
 					11				
 					12				
 					13				
 					14				
 					15				
 					16				
 					17				
 					18				
 					19				
 					20				
 					21				
 					22				
 					23				
 					24				
 					25				
 					26				
 					27				
 					28				
 					29				
 					30				
 					31				
 					32				
 					33				
 					34				
 					35				
 					36				
 					37				
 					38				
 					39				
 					40				
 					41				
 					42				
 					43				
 					44				
 					45				
 					46				
 					47				
 					48				
 					49				
 					50				
 					51				
 					52				
 					53				
 					54				
 					55				
 					56				
 					57				
 					58				
 					59				
 					60				
 					61				
 					62				
 					63				
 					64				
 					65				
 					66				
 					67				
 					68				
 					69				
 					70				
 					71				
 					72				
 					73				
 					74				
 					75				
 					76				
 					77				
 					78				
 					79				
 					80				
 					81				
 					82				
 					83				
 					84				
 					85				
 					86				
 					87				
 					88				
 					89				
 					90				
 					91				
 					92				
 					93				
 					94				
 					95				
 					96				
 					97				
 					98				
 					99				
 					100				
 					101				
 					102				
 					103				
 					104				
 					105				
 					106				
 					107				
 					108				
 					109				
 					110				
 					111				
 					112				
 					113				
 					114				
 					115				
 					116				
 					117				
 					118				
 					119				
 					120				
 					121				
 					122				
 					123				
 					124				
 					125				
 					126				
 					127				
 					128				
 					129				
 					130				
 					131				
 					132				
 					133			 | importcom.jcraft.jsch.*;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.stereotype.Component;importjava.io.InputStream;importjava.util.Properties;@ComponentpublicclassFtpUtil {privatestaticLogger logger = LoggerFactory.getLogger(FtpUtil.class);/*** ftp服务器ip地址*/privatestaticString host;@Value("${ftp.host}")publicvoidsetHost(String val){FtpUtil.host = val;}/*** 端口*/privatestaticintport;@Value("${ftp.port}")publicvoidsetPort(intval){FtpUtil.port = val;}/*** 用户名*/privatestaticString userName;@Value("${ftp.userName}")publicvoidsetUserName(String val){FtpUtil.userName = val;}/*** 密码*/privatestaticString password;@Value("${ftp.password}")publicvoidsetPassword(String val){FtpUtil.password = val;}/*** 存放图片的根目录*/privatestaticString rootPath;@Value("${ftp.rootPath}")publicvoidsetRootPath(String val){FtpUtil.rootPath = val;}/*** 存放图片的路径*/privatestaticString imgUrl;@Value("${ftp.img.url}")publicvoidsetImgUrl(String val){FtpUtil.imgUrl = val;}/*** 获取连接*/privatestaticChannelSftp getChannel() throwsException{JSch jsch = newJSch();//->ssh root@host:portSession sshSession = jsch.getSession(userName,host,port);//密码sshSession.setPassword(password);Properties sshConfig = newProperties();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 图片的存放路径*/publicstaticString 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;returnresultFile;} catch(Exception e) {logger.error("上传失败:"+ e.getMessage());}return"";}/*** 创建目录*/privatestaticvoidcreateDir(String path,ChannelSftp sftp) throwsSftpException {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 );}}}}/*** 删除图片*/publicstaticvoiddelImages(String imagesName){try{ChannelSftp sftp = getChannel();String path = rootPath + imagesName;sftp.rm(path);sftp.quit();sftp.exit();} catch(Exception e) {e.printStackTrace();}}} | 
工具类IDUtils.class(修改上传图片名):
| 					1				
 					2				
 					3				
 					4				
 					5				
 					6				
 					7				
 					8				
 					9				
 					10				
 					11				
 					12				
 					13				
 					14				
 					15				
 					16			 | importjava.util.Random;publicclassIDUtils {/*** 生成随机图片名*/publicstaticString genImageName() {//取当前时间的长整形值包含毫秒longmillis = System.currentTimeMillis();//加上三位随机数Random random = newRandom();intend3 = random.nextInt(999);//如果不足三位前面补0String str = millis + String.format("%03d", end3);returnstr;}} | 
NginxService.class:
| 					1				
 					2				
 					3				
 					4				
 					5				
 					6				
 					7				
 					8				
 					9				
 					10				
 					11				
 					12				
 					13				
 					14				
 					15				
 					16				
 					17				
 					18				
 					19				
 					20				
 					21				
 					22				
 					23				
 					24				
 					25				
 					26				
 					27				
 					28				
 					29				
 					30				
 					31				
 					32				
 					33				
 					34				
 					35				
 					36				
 					37				
 					38			 | importcom.wzy.util.FtpUtil;importcom.wzy.util.IDUtils;importlombok.extern.slf4j.Slf4j;importorg.joda.time.DateTime;importorg.springframework.stereotype.Service;importorg.springframework.web.multipart.MultipartFile;importjava.io.IOException;importjava.io.InputStream;/*** @Package: com.wzy.service* @Author: Clarence1* @Date: 2019/10/4 21:34*/@Service@Slf4jpublicclassNginxService {publicObject uploadPicture(MultipartFile uploadFile) {//1、给上传的图片生成新的文件名//1.1获取原始文件名String oldName = uploadFile.getOriginalFilename();//1.2使用IDUtils工具类生成新的文件名,新文件名 = newName + 文件后缀String newName = IDUtils.genImageName();assertoldName != null;newName = newName + oldName.substring(oldName.lastIndexOf("."));//1.3生成文件在服务器端存储的子目录String filePath = newDateTime().toString("/yyyyMMdd/");//2、把图片上传到图片服务器//2.1获取上传的io流InputStream input = null;try{input = uploadFile.getInputStream();} catch(IOException e) {e.printStackTrace();}//2.2调用FtpUtil工具类进行上传returnFtpUtil.putImages(input, filePath, newName);}} | 
NginxController.class:
| 					1				
 					2				
 					3				
 					4				
 					5				
 					6				
 					7				
 					8				
 					9				
 					10				
 					11				
 					12				
 					13				
 					14				
 					15				
 					16				
 					17				
 					18				
 					19				
 					20				
 					21				
 					22				
 					23				
 					24				
 					25				
 					26				
 					27				
 					28				
 					29				
 					30				
 					31				
 					32				
 					33				
 					34				
 					35				
 					36				
 					37				
 					38				
 					39				
 					40				
 					41				
 					42				
 					43				
 					44				
 					45				
 					46				
 					47				
 					48			 | importcom.fasterxml.jackson.core.JsonProcessingException;importcom.fasterxml.jackson.databind.ObjectMapper;importcom.wzy.service.NginxService;importlombok.extern.slf4j.Slf4j;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.PostMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.RestController;importorg.springframework.web.multipart.MultipartFile;importjava.util.HashMap;importjava.util.Map;@RestController@Slf4jpublicclassNginxController {@AutowiredprivateNginxService nginxService;/*** 可上传图片、视频,只需在nginx配置中配置可识别的后缀*/@PostMapping("/upload")publicString pictureUpload(@RequestParam(value = "file") MultipartFile uploadFile) {longbegin = System.currentTimeMillis();String json = "";try{Object result = nginxService.uploadPicture(uploadFile);json = newObjectMapper().writeValueAsString(result);} catch(JsonProcessingException e) {e.printStackTrace();}longend = System.currentTimeMillis();log.info("任务结束,共耗时:["+ (end-begin) + "]毫秒");returnjson;}@PostMapping("/uploads")publicObject picturesUpload(@RequestParam(value = "file") MultipartFile[] uploadFile) {longbegin = System.currentTimeMillis();Map<Object, Object> map = newHashMap<>(10);intcount = 0;for(MultipartFile file : uploadFile) {Object result = nginxService.uploadPicture(file);map.put(count, result);count++;}longend = System.currentTimeMillis();log.info("任务结束,共耗时:["+ (end-begin) + "]毫秒");returnmap;}} | 
启动项目,Postman神器一波
注意:
1.如果要视频跟图片一起上传的话,只要修改 nginx.conf配置文件,添加相应的视频后缀即可,代码没变,上传后也是放在 /usr/image 下,要不然文件能上传,但是访问不了
2.上面代码 uploads接口是实现多文件上传
源码下载
总结
	以上所述是小编给大家介绍的SpringBoot+nginx实现资源上传功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对快网idc网站的支持!
	如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
原文链接:https://blog.csdn.net/qq_38752386/article/details/102453756
相关文章
- ASP.NET本地开发时常见的配置错误及解决方法? 2025-06-10
- ASP.NET自助建站系统的数据库备份与恢复操作指南 2025-06-10
- 个人网站服务器域名解析设置指南:从购买到绑定全流程 2025-06-10
- 个人网站搭建:如何挑选具有弹性扩展能力的服务器? 2025-06-10
- 个人服务器网站搭建:如何选择适合自己的建站程序或框架? 2025-06-10
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
- 
            2025-05-25 66
- 
            2025-05-27 75
- 
            2025-05-26 47
- 
            2025-05-29 78
- 
            2025-06-04 57
 
        


 
    		 
            	 
															 
         
         
        
 
                         
                         
                        