nginx配置图片服务器

  1. server {
  2. listen 8001;
  3. server_name image.xxx.com;
  4.  
  5. proxy_set_header X-Forwarded-Host $host;
  6. proxy_set_header X-Forwarded-Server $host;
  7. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  8.  
  9. location / {
  10. # 放置物理路径
  11. root C:\\zysuyuan\\image;
  12. }
  13. }

一、编写application.yml

  1. server:
  2. port: 8082
  3. spring:
  4. application:
  5. name: upload-service
  6. servlet:
  7. multipart:
  8. max-file-size: 5MB
  9. eureka:
  10. client:
  11. service-url:
  12. defaultZone: http://localhost:10086/eureka
  13. instance:
  14. lease-renewal-interval-in-seconds: 5 # 心跳时间5s
  15. lease-expiration-duration-in-seconds: 15 # 过期时间15s

二、编写Controller

  1. @Controller
  2. @RequestMapping("upload")
  3. public class UploadController {
  4.  
  5. @Autowired
  6. private UploadService uploadService;
  7.  
  8. @PostMapping("image")
  9. public ResponseEntity<String> uploadImage(@RequestParam("file")MultipartFile file){
  10. String url = this.uploadService.uploadImage(file);
  11. if (StringUtils.isBlank(url)){
  12. return ResponseEntity.badRequest().build();
  13. }
  14. return ResponseEntity.status(HttpStatus.CREATED).body(url);
  15. }
  16. }

三、编写Service

  1. @Service
  2. public class UploadService {
  3.  
  4. // 制作文件的白名单,使用Arrays.asList列出一个常量的字符串
  5. private static final List<String> CONTENT_TYPES = Arrays.asList("image/gif","image/jpeg","image/png");
  6. // 定义输出错误日志
  7. private static final Logger LOGGER = LoggerFactory.getLogger(UploadService.class);
  8.  
  9. public String uploadImage(MultipartFile file) {
  10.  
  11. // 获取文件类型
  12. String originalFilename = file.getOriginalFilename();
  13.  
  14. try {
  15. // 校验文件类型
  16. // 列出所有文件合法类型
  17. String contentType = file.getContentType();
  18. if (!CONTENT_TYPES.contains(contentType)){
  19. LOGGER.info("文件类型不合法:{}",originalFilename);
  20. return null;
  21. }
  22.  
  23. // 校验文件的内容,ImageIO读取文件内容
  24. BufferedImage bufferedImage = ImageIO.read(file.getInputStream());
  25. if (bufferedImage == null) {
  26. LOGGER.info("文件内容不合法:{}",originalFilename);
  27. return null;
  28. }
  29.  
  30. // 保存到服务器
  31. file.transferTo(new File("C:\\zysuyuan\\image\\" + originalFilename));
  32.  
  33. // 返回url,进行回显
  34. return "http://image.xxx.com/" + originalFilename;
  35.  
  36. } catch (IOException e) {
  37. LOGGER.info("服务器内部错误:" + originalFilename);
  38. e.printStackTrace();
  39. }
  40. return null;
  41. }
  42. }

测试:使用Advanced-REST-client进行文件上传测试

链接:https://pan.baidu.com/s/10Ax3eSY5zCwRRMHBDI-1sw
提取码:cjhq

最后,可以通过访问nginx配置的web服务器,访问对于图片的url来测试文件是否上传成功。

使用springboot上传文件至nginx代理服务器的更多相关文章

  1. springboot上传文件 & 不配置虚拟路径访问服务器图片 & springboot配置日期的格式化方式 & Springboot配置日期转换器

    1.    Springboot上传文件 springboot的文件上传不用配置拦截器,其上传方法与SpringMVC一样 @RequestMapping("/uploadPicture&q ...

  2. springBoot上传文件时MultipartFile报空问题解决方法

    springBoot上传文件时MultipartFile报空问题解决方法 1.问题描述: 之前用spring MVC,转成spring boot之后发现上传不能用.网上参考说是spring boot已 ...

  3. SpringBoot上传文件到本服务器 目录与jar包同级问题

    目录 前言 原因 实现 不要忘记 最后的封装 Follow up   前言 看标题好像很简单的样子,但是针对使用jar包发布SpringBoot项目就不一样了.当你使用tomcat发布项目的时候,上传 ...

  4. SpringBoot 上传文件到linux服务器 异常java.io.FileNotFoundException: /tmp/tomcat.50898……解决方案

    SpringBoot 上传文件到linux服务器报错java.io.FileNotFoundException: /tmp/tomcat.50898-- 报错原因: 解决方法 java.io.IOEx ...

  5. 上传文件被nginx全部缓存的问题

    nginx采用1.5.6. 后端采用nodejs+formidable的方式接受上传文件,本问题的对应与采用什么样的后端没太大关系,这里只是交代一下. 问题: 在前端页面上将文件上传,nginx没有将 ...

  6. SpringBoot上传文件到本服务器 目录与jar包同级

    前言 看标题好像很简单的样子,但是针对使用jar包发布SpringBoot项目就不一样了. 当你使用tomcat发布项目的时候,上传文件存放会变得非常简单,因为你可以随意操作项目路径下的资源.但是当你 ...

  7. nginx上传文件时 nginx 413 Request Entity Too Large 错误

    产生原因: 上传文件的大小超出了 Nginx 允许的最大值,默认是1M: 解决方法: 修改Nginx的配置文件(一般是:nginx/nginx.conf),在 http{} 段中增大nginx上传文件 ...

  8. spring-boot上传文件MultiPartFile获取不到文件问题解决

    1.现象是在spring-boot里加入commons-fileupload jar并且配置了mutilPart的bean,在upload的POST请求后,发现 multipartRequest.ge ...

  9. SpringBoot上传文件

    1.pom文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w ...

随机推荐

  1. Dubbo的服务请求失败怎么处理

    dubbo启动时默认有重试机制和超时机制. 超时机制的规则是如果在一定的时间内,provider没有返回,则认为本次调用失败, 重试机制在出现调用失败时,会再次调用.如果在配置的调用次数内都失败,则认 ...

  2. git统计项目中成员代码量

    查看git上个人代码量 git log --author="username" --pretty=tformat: --numstat | awk '{ add += $1; su ...

  3. ES5-call,apply,bind的用法

    区别bind()与call()和apply()? 1. Function.prototype.bind(obj) : * 作用: 将函数内的this绑定为obj, 并将函数返回2. 面试题: 区别bi ...

  4. Go语言简介以及安装

    http://www.runoob.com/go/go-tutorial.html Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易. Go是从2007年末由Robert Grie ...

  5. C++调用python(C++)

    C++源代码:python部分就是正常的python代码 #include <string.h> #include <math.h> #include "iostre ...

  6. C/C++ nullptr

    nullptr 关键字表示空指针值. 空指针值可用于指明对象句柄.内部指针或本机指针类型不指向对象. 结合使用 nullptr 与托管代码或本机代码. 编译器为托管空指针值和本机空指针值发出相应但不同 ...

  7. C++Builder中注册表的操作

    僮骶头浅5募虻チ耍旅嫖揖鸵砸桓鍪道此得鱐Registry类的用法.首先,先介绍一下TRegistry的属性和方法:TRegistry类一共有四个属性.属性 类型 描述CurrentKey int ...

  8. 解决jquery调用NET webservice跨域的问题

    声明,解决方案由网上收集而来,个人整理.有别人的,也有我的. 一.webserive端 1.web.config 需要在web.config的configuration节点中加入如下的黑体部分内容. ...

  9. POJ 2932 平面扫描 /// 判断圆的包含关系

    题目大意: 平面上有n个两两不相交的圆,给定圆的圆心(x,y)和半径 r 求所有最外层的 即 不包含于其他圆内部的圆 挑战258页 平面扫描 记录所有圆的左端和右端 排序后 逐一扫描 将到当前圆为止的 ...

  10. java_JDK8中新增的时间API

    java.time 包含值对象的基础包 java.time.chrono 提供对不同的日历系统的访问 java.time.format 格式化和解析时间的日期 java.time.temporal 包 ...