使用springboot上传文件至nginx代理服务器
nginx配置图片服务器
- server {
- listen 8001;
- server_name image.xxx.com;
- proxy_set_header X-Forwarded-Host $host;
- proxy_set_header X-Forwarded-Server $host;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- location / {
- # 放置物理路径
- root C:\\zysuyuan\\image;
- }
- }
一、编写application.yml
- server:
- port: 8082
- spring:
- application:
- name: upload-service
- servlet:
- multipart:
- max-file-size: 5MB
- eureka:
- client:
- service-url:
- defaultZone: http://localhost:10086/eureka
- instance:
- lease-renewal-interval-in-seconds: 5 # 心跳时间5s
- lease-expiration-duration-in-seconds: 15 # 过期时间15s
二、编写Controller
- @Controller
- @RequestMapping("upload")
- public class UploadController {
- @Autowired
- private UploadService uploadService;
- @PostMapping("image")
- public ResponseEntity<String> uploadImage(@RequestParam("file")MultipartFile file){
- String url = this.uploadService.uploadImage(file);
- if (StringUtils.isBlank(url)){
- return ResponseEntity.badRequest().build();
- }
- return ResponseEntity.status(HttpStatus.CREATED).body(url);
- }
- }
三、编写Service
- @Service
- public class UploadService {
- // 制作文件的白名单,使用Arrays.asList列出一个常量的字符串
- private static final List<String> CONTENT_TYPES = Arrays.asList("image/gif","image/jpeg","image/png");
- // 定义输出错误日志
- private static final Logger LOGGER = LoggerFactory.getLogger(UploadService.class);
- public String uploadImage(MultipartFile file) {
- // 获取文件类型
- String originalFilename = file.getOriginalFilename();
- try {
- // 校验文件类型
- // 列出所有文件合法类型
- String contentType = file.getContentType();
- if (!CONTENT_TYPES.contains(contentType)){
- LOGGER.info("文件类型不合法:{}",originalFilename);
- return null;
- }
- // 校验文件的内容,ImageIO读取文件内容
- BufferedImage bufferedImage = ImageIO.read(file.getInputStream());
- if (bufferedImage == null) {
- LOGGER.info("文件内容不合法:{}",originalFilename);
- return null;
- }
- // 保存到服务器
- file.transferTo(new File("C:\\zysuyuan\\image\\" + originalFilename));
- // 返回url,进行回显
- return "http://image.xxx.com/" + originalFilename;
- } catch (IOException e) {
- LOGGER.info("服务器内部错误:" + originalFilename);
- e.printStackTrace();
- }
- return null;
- }
- }
测试:使用Advanced-REST-client进行文件上传测试
链接:https://pan.baidu.com/s/10Ax3eSY5zCwRRMHBDI-1sw
提取码:cjhq
最后,可以通过访问nginx配置的web服务器,访问对于图片的url来测试文件是否上传成功。
使用springboot上传文件至nginx代理服务器的更多相关文章
- springboot上传文件 & 不配置虚拟路径访问服务器图片 & springboot配置日期的格式化方式 & Springboot配置日期转换器
1. Springboot上传文件 springboot的文件上传不用配置拦截器,其上传方法与SpringMVC一样 @RequestMapping("/uploadPicture&q ...
- springBoot上传文件时MultipartFile报空问题解决方法
springBoot上传文件时MultipartFile报空问题解决方法 1.问题描述: 之前用spring MVC,转成spring boot之后发现上传不能用.网上参考说是spring boot已 ...
- SpringBoot上传文件到本服务器 目录与jar包同级问题
目录 前言 原因 实现 不要忘记 最后的封装 Follow up 前言 看标题好像很简单的样子,但是针对使用jar包发布SpringBoot项目就不一样了.当你使用tomcat发布项目的时候,上传 ...
- SpringBoot 上传文件到linux服务器 异常java.io.FileNotFoundException: /tmp/tomcat.50898……解决方案
SpringBoot 上传文件到linux服务器报错java.io.FileNotFoundException: /tmp/tomcat.50898-- 报错原因: 解决方法 java.io.IOEx ...
- 上传文件被nginx全部缓存的问题
nginx采用1.5.6. 后端采用nodejs+formidable的方式接受上传文件,本问题的对应与采用什么样的后端没太大关系,这里只是交代一下. 问题: 在前端页面上将文件上传,nginx没有将 ...
- SpringBoot上传文件到本服务器 目录与jar包同级
前言 看标题好像很简单的样子,但是针对使用jar包发布SpringBoot项目就不一样了. 当你使用tomcat发布项目的时候,上传文件存放会变得非常简单,因为你可以随意操作项目路径下的资源.但是当你 ...
- nginx上传文件时 nginx 413 Request Entity Too Large 错误
产生原因: 上传文件的大小超出了 Nginx 允许的最大值,默认是1M: 解决方法: 修改Nginx的配置文件(一般是:nginx/nginx.conf),在 http{} 段中增大nginx上传文件 ...
- spring-boot上传文件MultiPartFile获取不到文件问题解决
1.现象是在spring-boot里加入commons-fileupload jar并且配置了mutilPart的bean,在upload的POST请求后,发现 multipartRequest.ge ...
- SpringBoot上传文件
1.pom文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w ...
随机推荐
- Dubbo的服务请求失败怎么处理
dubbo启动时默认有重试机制和超时机制. 超时机制的规则是如果在一定的时间内,provider没有返回,则认为本次调用失败, 重试机制在出现调用失败时,会再次调用.如果在配置的调用次数内都失败,则认 ...
- git统计项目中成员代码量
查看git上个人代码量 git log --author="username" --pretty=tformat: --numstat | awk '{ add += $1; su ...
- ES5-call,apply,bind的用法
区别bind()与call()和apply()? 1. Function.prototype.bind(obj) : * 作用: 将函数内的this绑定为obj, 并将函数返回2. 面试题: 区别bi ...
- Go语言简介以及安装
http://www.runoob.com/go/go-tutorial.html Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易. Go是从2007年末由Robert Grie ...
- C++调用python(C++)
C++源代码:python部分就是正常的python代码 #include <string.h> #include <math.h> #include "iostre ...
- C/C++ nullptr
nullptr 关键字表示空指针值. 空指针值可用于指明对象句柄.内部指针或本机指针类型不指向对象. 结合使用 nullptr 与托管代码或本机代码. 编译器为托管空指针值和本机空指针值发出相应但不同 ...
- C++Builder中注册表的操作
僮骶头浅5募虻チ耍旅嫖揖鸵砸桓鍪道此得鱐Registry类的用法.首先,先介绍一下TRegistry的属性和方法:TRegistry类一共有四个属性.属性 类型 描述CurrentKey int ...
- 解决jquery调用NET webservice跨域的问题
声明,解决方案由网上收集而来,个人整理.有别人的,也有我的. 一.webserive端 1.web.config 需要在web.config的configuration节点中加入如下的黑体部分内容. ...
- POJ 2932 平面扫描 /// 判断圆的包含关系
题目大意: 平面上有n个两两不相交的圆,给定圆的圆心(x,y)和半径 r 求所有最外层的 即 不包含于其他圆内部的圆 挑战258页 平面扫描 记录所有圆的左端和右端 排序后 逐一扫描 将到当前圆为止的 ...
- java_JDK8中新增的时间API
java.time 包含值对象的基础包 java.time.chrono 提供对不同的日历系统的访问 java.time.format 格式化和解析时间的日期 java.time.temporal 包 ...