SpringBoot利用Nginx作为文件服务器实现文件上传和访问 您所在的位置:网站首页 java实现上传文件到本地 SpringBoot利用Nginx作为文件服务器实现文件上传和访问

SpringBoot利用Nginx作为文件服务器实现文件上传和访问

2024-06-21 12:12| 来源: 网络整理| 查看: 265

本来使用springboot做的文件上传本地测试没问题,但是后端部署到公司的服务器以后,前后端联调就会上传文件后,根据返回路径访问不到图片(linux并不会让你直接根据域名/路径/文件名 的方式获取资源)。解决办法:使用nginx反向代理。

1.提前在服务器的nginx配置 server { listen 80; server_name 域名; location / { root html; index index.html index.htm; } #以下为我添加的配置 location ~ .(jpg|png|jpeg|gif|bmp)$ { #可识别的文件后缀 root /usr/local/webserver/nginx/image/; #图片的映射路径 autoindex on; #开启自动索引 # expires 1h; #过期时间 } #至此结束 }

简单的说就是nginx监听了80端口,只要是.(jpg|png|jpeg|gif|bmp)结尾的url都会去/usr/local/webserver/nginx/image/下面找对应的文件。

2.项目配置文件 #文件上传配置 spring.servlet.multipart.enabled=true #单个文件最大大小 spring.servlet.multipart.max-file-size=30MB #一次请求文件最大大小 spring.servlet.multipart.max-request-size=100MB #文件保存路径 #linux下文件的上传路径 file.upload.path=/usr/local/webserver/nginx/image/ #文件访问路径 file.coming.path=http://ip:nginx监听的端口/ 3.后端文件上传接口 import cn.anson.AdminAnsonApplication; import cn.anson.model.Result; import cn.anson.model.ResultCodeEnum; import cn.anson.model.vo.UploadVO; import cn.anson.utils.MyException; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.CrossOrigin; 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 org.springframework.web.multipart.MultipartHttpServletRequest; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.io.File; import java.io.IOException; import java.util.List; import java.util.UUID; /** * @author yhd * @createtime 2020/10/11 16:40 */ @CrossOrigin @Slf4j @RestController @RequestMapping("/api/img") public class ImgUpLoadController { @Value("${file.upload.path}") private String fileSavePath; @Value("${file.coming.path}") private String fileComingPath; @PostMapping("upload") public Result updloadImg(MultipartFile upload,HttpServletRequest request){ try { //获取文件上传路径 String path = fileSavePath; log.info("文件上传路径为:"+path); File file = new File(path); //判断不存在该目录就创建 if (!file.exists()){ file.mkdirs(); } //获取文件名 String filename = upload.getOriginalFilename(); log.info(filename); //起别名 String s = UUID.randomUUID().toString().replace("-", "").toUpperCase(); filename=s+filename; //开始上传 upload.transferTo(new File(file,filename)); UploadVO uploadVO = new UploadVO(); uploadVO.setFileName(fileComingPath+filename); log.info("最终文件的访问路径:"+uploadVO.getFileName()); return Result.ok(uploadVO); } catch (IOException e) { log.error("图片上传失败"+upload.getOriginalFilename()); throw new MyException(ResultCodeEnum.SERVICE_ERROR); } } } 4.使用postMan测试 { "code": 200, "message": "成功", "data": { "fileName": "http://ip:nginx监听的端口/57A05F7EC8524363962403F1C539FD2Atimg.jpg" }, "ok": true }

点击访问这个路径 在这里插入图片描述 成功访问到。

补充:pom.xml 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 com.jcraft jsch 0.1.54 joda-time joda-time 2.10.3


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有