我是靠谱客的博主 悲凉巨人,最近开发中收集的这篇文章主要介绍SpringMVC -> 上传文件到服务器(commonsmultipartfile),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

    • 导包
    • mvc.xml
    • controller:方法一
    • controller:方法二

导包

1.servlet的高版本的包,如果你还加了低版本的,就把低版本的删除了,不然等会找不到某些方法的


<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>

mvc.xml

1.这是固定的,不变的
2.类是commonsmultipartresolver
3.id必须是multipartResolver,一点都不能改,否则保证出错


<!--文件上传配置-->
<bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
id="multipartResolver">
<!-- 请求的编码格式,必须和jSP的pageEncoding属性一致,以便正确读取表单的内容,默认为ISO-8859-1 -->
<property name="defaultEncoding" value="utf-8"/>
<!-- 上传文件大小上限,单位为字节(10485760=10M) -->
<property name="maxUploadSize" value="10485760"/>
<property name="maxInMemorySize" value="40960"/>
</bean>

controller:方法一

1.getoriginalfilename():获取上传文件的名字
2.如果你没有上传东西,就重定向到原来的位置极速index.html
3.requset.getservletcontext.getrealpath:在服务器设置一个保存的位置
4.如果设置的位置目录不存在,就怎么造一个
5.开始传,输入输出io流创建,一顿输出
6.关闭流,重定向到主页,让你继续传

@Controller
public class FileController {
//@RequestParam("file") 将name=file控件得到的文件封装成CommonsMultipartFile 对象
//批量上传CommonsMultipartFile则为数组即可
@RequestMapping("/upload")
public String fileUplaod(@RequestParam("file") CommonsMultipartFile file,
HttpServletRequest request) {
//获取文件名 : file.getOriginalFilename();
String originalFilename = file.getOriginalFilename();
//如果文件名为空,直接回到首页!
if ("".equals(originalFilename)) {
return "redirect:/index.html";
}
//上传路径保存设置
String realPath = request.getServletContext().getRealPath("/upload");
File path = new File(realPath);
//如果路径不存在,创建一个
if (!path.exists()) {
path.mkdirs();
}
//try-with-resources环绕,这样就不用手动关闭流了
try {
try (InputStream inputStream = file.getInputStream()) {
try (FileOutputStream outputStream = new FileOutputStream(new File(path, originalFilename))) {
//读取写出
int len = 0;
byte[] bytes = new byte[1024];
while ((len = inputStream.read(bytes)) != -1) {
outputStream.write(bytes, 0, len);
outputStream.flush();
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
return "redirect:/index.html";
}
}

controller:方法二

1.一定要先判断是不是传了文件,不判断,下面就不会创建upload文件夹,就会报错
2.没有目录就创建一个目录upload,在满足1的条件下
3.file.transferTo:创建一个文件,file1是目录,getoriginalfilename是文件名字;目录/名字

@Controller
public class FileController2 {
@RequestMapping("/upload2")
public String fileUpload(@RequestParam("file") CommonsMultipartFile file,
HttpServletRequest request) {
//获取文件名 : file.getOriginalFilename();
String originalFilename = file.getOriginalFilename();
//如果文件名为空,直接回到首页!不返回下面可能会创建一个文件,等会transferTo的时候识别不了位置
if ("".equals(originalFilename)) {
return "redirect:/index.html";
}
//上传路径保存设置
String realPath = request.getServletContext().getRealPath("/upload");
File file1 = new File(realPath);
//没有就创建一个,创建的如果没有前面的if判断,就会创建一个空的目录,相当于没创建
//那么如果第一次提交没有东西,创建一个等于没创建的文件夹,下次再提交一个真的文件的时候
//就不会再执行if,因为已经识别存在了文件夹,下面就会出现找不到upload文件夹的错误
if (!file1.exists()) {
file1.mkdir();
}
try {
//通过CommonsMultipartFile的方法直接写文件,file1的名字就是upload目录+/+上传文件名,合起来就是文件了
//如果file1是"",就会创建一个名字是upload的文件和一个空的文件夹(等于没有)
file.transferTo(new File(file1 + "/" + file.getOriginalFilename()));
} catch (IOException e) {
e.printStackTrace();
}
return "redirect:/index.html";
}
}

最后

以上就是悲凉巨人为你收集整理的SpringMVC -> 上传文件到服务器(commonsmultipartfile)的全部内容,希望文章能够帮你解决SpringMVC -> 上传文件到服务器(commonsmultipartfile)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(30)

评论列表共有 0 条评论

立即
投稿
返回
顶部