java文件上传原理(java实现文件上传的三种方式)

   2023-04-08 互联网0
核心提示:上传文件是互联网中常常应用的场景之一,最典型的情况就是上传头像等,今天就带着带着大家做一个 Spring Boot 上传文件的小案例。 1、pom 包配置 我们使用 Spring Boot 版本 2.1.0、jdk 1.8、tomca

java文件上传原理(java实现文件上传的三种方式)

上传文件是互联网中常常应用的场景之一,最典型的情况就是上传头像等,今天就带着带着大家做一个 Spring Boot 上传文件的小案例。

1、pom 包配置

我们使用 Spring Boot 版本 2.1.0、jdk 1.8、tomcat 8.0。

org.springframework.boot

spring-boot-starter-parent

2.1.0.RELEASE

<java.version>1.8

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-thymeleaf

org.springframework.boot

spring-boot-devtools

true

引入了
spring-boot-starter-thymeleaf做页面模板引擎,写一些简单的上传示例。

2、启动类设置

@SpringBootApplication

public class FileUploadWebApplication {

public static void main(String[] args) throws Exception {

SpringApplication.run(FileUploadWebApplication.class, args);

}

@Bean

public TomcatServletWebServerFactory tomcatEmbedded() {

TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();

tomcat.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {

if ((connector.getProtocolHandler() instanceof AbstractHttp11Protocol)) {

//-1 means unlimited

((AbstractHttp11Protocol) connector.getProtocolHandler()).setMaxSwallowSize(-1);

}

});

return tomcat;

}

}

tomcatEmbedded 这段代码是为了解决,上传文件大于10M出现连接重置的问题。此异常内容 GlobalException 也捕获不到。

详细内容参考:Tomcat large file upload connection reset

3、编写前端页面

上传页面

Spring Boot file upload example



非常简单的一个 Post 请求,一个选择框选择文件,一个提交按钮,效果如下:

上传结果展示页面:

Spring Boot – Upload Status

效果图如下:

4、编写上传控制类

访问 localhost 自动跳转到上传页面:

@GetMapping(“/”)

public String index() {

return “upload”;

}

上传业务处理

@PostMapping(“/upload”)

public String singleFileUpload(@RequestParam(“file”) MultipartFile file,

RedirectAttributes redirectAttributes) {

if (file.isEmpty()) {

redirectAttributes.addFlashAttribute(“message”, “Please select a file to upload”);

return “redirect:uploadStatus”;

}

try {

// Get the file and save it somewhere

byte[] bytes = file.getBytes();

Path path = Paths.get(UPLOADED_FOLDER + file.getOriginalFilename());

Files.write(path, bytes);

redirectAttributes.addFlashAttribute(“message”,

“You successfully uploaded ‘” + file.getOriginalFilename() + “‘”);

} catch (IOException e) {

e.printStackTrace();

}

return “redirect:/uploadStatus”;

}

上面代码的意思就是,通过MultipartFile读取文件信息,如果文件为空跳转到结果页并给出提示;如果不为空读取文件流并写入到指定目录,最后将结果展示到页面。

MultipartFile是Spring上传文件的封装类,包含了文件的二进制流和文件属性等信息,在配置文件中也可对相关属性进行配置,基本的配置信息如下:

spring.http.multipart.enabled=true #默认支持文件上传. spring.http.multipart.file-size-threshold=0 #支持文件写入磁盘. spring.http.multipart.location= # 上传文件的临时目录 spring.http.multipart.max-file-size=1Mb # 最大支持文件大小 spring.http.multipart.max-request-size=10Mb # 最大支持请求大小

最常用的是最后两个配置内容,限制文件上传大小,上传时超过大小会抛出异常:

更多配置信息参考这里:Common application properties

5、异常处理

@ControllerAdvice

public class GlobalExceptionHandler {

@ExceptionHandler(MultipartException.class)

public String handleError1(MultipartException e, RedirectAttributes redirectAttributes) {

redirectAttributes.addFlashAttribute(“message”, e.getCause().getMessage());

return “redirect:/uploadStatus”;

}

}

设置一个@ControllerAdvice用来监控Multipart上传的文件大小是否受限,当出现此异常时在前端页面给出提示。利用@ControllerAdvice可以做很多东西,比如全局的统一异常处理等,感兴趣的同学可以下来了解。

6、总结

这样一个使用 Spring Boot 上传文件的简单 Demo 就完成了,感兴趣的同学可以将示例代码下载下来试试吧。

 
标签: 原理 页面 方式
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与爱美生活网(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • cci指标原理和详解 其计算方法是什么
    cci指标原理和详解 其计算方法是什么
    顺势指标又叫CCI指标,是一种比较新颖的技术指标,更是一种超买超卖指标,当然,还是短线操作中最好用的指标之一。今天咱们来聊聊关于cci指标原理和详解,顺便看看其计算方法是什么?cci指标原理和详解 所谓超买超卖指标,顾名思义,“超买”,就是
  • 比特币合约交易原理与风险揭示——以NEO币为例
    比特币合约交易解析比特币合约简单来说并不深奥。以NEO币为例,假设其价格为100元,投资者A预期价格上涨,而B则预测下跌。两者依据各自判断,在如欧易OKEx这样的期货交易平台上下注。A投入100元作为保证金购买看涨合约,B亦投入相同金额购买
  • TRX波场币的质押奖励是什么?,质押奖励的概念与
    在当今的加密货币世界中,TRX波场币以其独特的技术优势和创新的经济模型吸引着全球投资者的目光。其中,最引人入胜的一项激励机制便是其质押奖励制度。这不仅为持有者提供了额外收益的可能性,更推动了波场网络的稳定与繁荣。那么,TRX波场币的质押奖励
    04-21
  • 3d眼镜的原理
    3d眼镜的原理
    3d眼镜原理3d眼镜的原理是采用的人的立体视觉,造出双眼立体式影像,当人的眼睛看事物时都会形成角度差,而3d眼镜正是利用角度差的立体原理制作成的,创造出双眼三维空间类视觉影像技术,然后3d眼镜就能利用偏振光达到平面变三维的效果。
    03-26
  • 回南天墙壁出水原理 为什么回南天墙壁会渗水
    回南天墙壁出水原理 为什么回南天墙壁会渗水
    1、回南天墙面的水是水蒸气凝结而成的。回南天会有一股温流。当与冷空气对流就会形成水蒸气。2、遇到墙面等接触问就会产生水株。从而使墙面冒出水。需要用干毛巾将水擦干。还需要保持室内通风。如果在阴雨天时。需改变门窗。避免墙面受湿。回南天墙面冒出水
  • 为什么别人买基金赚钱呢 基金赚钱的原理是什么
    为什么别人买基金赚钱呢 基金赚钱的原理是什么
    别人的基金赚钱可能是由于在低位买入,持有的时间较长,很关注基金的长期走势。并在投资的时候有很坚定的目标,不会追涨杀跌。基金涨价的原理其实就是等基金的价格上涨后赚取买卖差价。为什么别人买基金赚钱呢 1。为什么别人买基金赚钱呢为什么别人买基金赚
    01-28 基金赚钱
  • 15岁女孩服感冒药引发肝衰竭 引发肝衰的原理是什么
    15岁女孩服感冒药引发肝衰竭 引发肝衰的原理是
    近日河南平顶山鲁山一位15岁女孩因为感冒之后自行购药服用后引起急性肝衰竭的事情引起人们的关注,这位小女孩肝衰竭的原因是自己盲目用药,给肝脏带来了负担。医生提醒,因为乱吃药引起肝衰的情况非常常见,希望大家患病后到正规医疗机构就诊。15岁女孩服
  • 为什么我炒股不赚钱 股票赚钱的原理是什么
    为什么我炒股不赚钱 股票赚钱的原理是什么
    有的人靠打工赚钱,有的人自己创业赚钱,而还有人靠炒股票赚钱,但是靠炒股赚钱并不是人人都可以的,甚至乎会遇到亏损的情况,那么究竟为什么我炒股不赚钱呢?下面一起来看看。为什么我炒股不赚钱 股票不赚钱的原因是很多的,而对于散户来说,一般买股票不赚
  • 股票涨跌的原理是什么?股票在什么情况下会上涨
    股票涨跌的原理是什么?股票在什么情况下会上涨
    股票涨跌是市场的供求关系所导致。当资金量,业绩,政策等方面出现变动的时候,股票的价格就会波动所。市场里的股票供不应求的时候,它的价格就会上涨了。股票涨跌的原理是什么?股票在什么情况下会上涨 涨跌其实就是价格的波动,这种现象很正常,这种波动也
  • 美国计划使用氮气执行死刑 氮气死刑原理是什么
    美国计划使用氮气执行死刑 氮气死刑原理是什么
    近日,联合国专家呼吁美国停止推动使用氮气缺氧的方式处刑囚犯的计划,美国的这一计划也引起人们的关注。氮气死刑的远离是让人窒息而亡,囚犯会被戴上连接到氮气瓶的呼吸面罩,陷入缺氧状态,原本美国计划于2024年对犯下雇佣谋杀罪被判死刑的肯尼斯·史密
    01-05 方法美国