Spring MVC为文件上传提供了直接的支持,这种支持是通过即插即用的MultipartResolver实现的。Spring使用Jakarta Commons FileUpload 技术实现了一个MultipartResolver实现类:CommonsMultipartResolver。
Spring MVC上下文中默认没有装配MultipartResolver,因此默认情况下不能处理文件的上传工作。如果想要使用Spring的文件上传功能,需要先在上下文中配置MultipartResolver。
第一步:配置MultipartResolver
使用CommonsMultipartResolver配置一个MultipartResolver解析器:
<bean id="multipartResolver" class="orgspringframeworkwebmultipartcommonsCommonsMultipartResolver"
p:defaultEncoding="UTF-8"
p:maxUploadSize="5242880"
p:uploadTempDir="/upload/temp"
/>
defaultEncoding必须和用户JSP的pageEncoding属性一致,以便正确读取表单的内容。uploadTempDir是文件上传过程所使用的临时目录,文件上传完成后,临时目录中的临时文件会被自动清除。
第二步:编写文件上传表单页面和控制器
JSP页面如下:
<%@ page language="java" import="javautil" pageEncoding="utf-8"%>
<%
String path = requestgetContextPath();
String basePath = requestgetScheme()+"://"+requestgetServerName()+":"+requestgetServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 401 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'indexjsp' starting page</title>
<meta >
首选做一个简单的案例,也就是单个文件上传的案例。(这个案例是基于SpringBoot上面的,所以大家首先得搭建好SpringBoot这个框架)
前台HTML代码:
[html] view plain copy
<html>
<body>
<form action="/upload" method="POST" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="submit" value="Upload"/>
</form>
</body>
</html>
后台接收代码:
[java] view plain copy
/
文件上传具体实现方法;
@param file
@return
/
@RequestMapping("/upload")
@ResponseBody
public String handleFileUpload(@RequestParam("file") MultipartFile file) {
if (!fileisEmpty()) {
try {
/
这段代码执行完毕之后,上传到了工程的跟路径; 大家自己扩散下思维,如果我们想把上传到
d:/files大家是否能实现呢? 等等;
这里只是简单一个例子,请自行参考,融入到实际中可能需要大家自己做一些思考,比如: 1、文件路径; 2、文件名;
3、文件格式; 4、文件大小的限制;
/
BufferedOutputStream out = new BufferedOutputStream(
new FileOutputStream(new File(
filegetOriginalFilename())));
Systemoutprintln(filegetName());
outwrite(filegetBytes());
outflush();
outclose();
} catch (FileNotFoundException e) {
eprintStackTrace();
return "上传失败," + egetMessage();
} catch (IOException e) {
eprintStackTrace();
return "上传失败," + egetMessage();
}
return "上传成功";
} else {
return "上传失败,因为文件是空的";
}
}
这样就可以实现对multipart/form-data类型文件的接收了。那如果是多个文件外加多个字段呢,下面接着看下一个多个文件上传的案例。
前台HTML界面:
[html] view plain copy
<!DOCTYPE html>
<html xmlns=">
xmlns:sec=">
<head>
<title>Hello World!</title>
</head>
<body>
<form method="POST" enctype="multipart/form-data" action="/batch/upload">
<p>文件1:<input type="text" name="id" /></p>
<p>文件2:<input type="text" name="name" /></p>
<p>文件3:<input type="file" name="file" /></p>
<p><input type="submit" value="上传" /></p>
</form>
</body>
</html>
后台接收代码:
[java] view plain copy
@RequestMapping(value = "/batch/upload", method = RequestMethodPOST)
@ResponseBody
public String handleFileUpload(>
Multipart>
List<MultipartFile> files = ((Multipart>
getFiles("file");
String name=paramsgetParameter("name");
Systemoutprintln("name:"+name);
String id=paramsgetParameter("id");
Systemoutprintln("id:"+id);
MultipartFile file = null;
BufferedOutputStream stream = null;
for (int i = 0; i < filessize(); ++i) {
file = filesget(i);
if (!fileisEmpty()) {
try {
byte[] bytes = filegetBytes();
stream = new BufferedOutputStream(new FileOutputStream(
new File(filegetOriginalFilename())));
streamwrite(bytes);
streamclose();
} catch (Exception e) {
stream = null;
return "You failed to upload " + i + " => "
+ egetMessage();
}
} else {
return "You failed to upload " + i
+ " because the file was empty";
}
}
return "upload successful";
}
这样就可以实现对多个文件的接收了功能了。
form的enctype=”multipart/form-data” 这个是上传文件必须的
2applicationContextxml中 <bean id=”multipartResolver” class=”orgspringframeworkwebmultipartcommonsCommonsMultipartResolver”/> 关于文件上传的配置不
@Controller
public class UploadAction {
@RequestMapping(value = "/uploaddo")
public String upload(@RequestParam(value = "file", required = false) MultipartFile file, >
1单文件上传
11、页面
文件上传需要将表单的提交方法设置为post,将enctype的值设置为”multipart/form-data”。
<form action="${pageContextrequestcontextPath}/test/uploaddo" method="post" enctype="multipart/form-data">
<input type="file" name="img"><br />
<input type="submit" name="提交">
</form>
12 控制器
@Controller
@RequestMapping("/test")
public class MyController {
@RequestMapping(value = "/uploaddo", method = RequestMethodPOST)
// 这里的MultipartFile对象变量名跟表单中的file类型的input标签的name相同,
//所以框架会自动用MultipartFile对象来接收上传过来的文件,
//当然也可以使用@RequestParam("img")指定其对应的参数名称
public String upload(MultipartFile img, >
参考文章:
>
在访问web目录下资源时,requestgetServletContext()getRealPath()经常被使用,该代码作用是获取项目的绝对路径,例如
D:\demo\JAVA EE\Spring MVC\metadata\plugins\orgeclipsewstservercore\tmp0\wtpwebapps\Fortis\imgProduct
至于其和本地路径
D:\demo\JAVA EE\Spring MVC\Fortis\WebContent
的关系和两者之间的实际应用,下面会举例解释:
tomcat服务器启动时,项目会被加载到tomcat的项目路径下,此时项目的资源获取在项目路径而不是初始存放的本地路径,且每次tomcat部署时会清空并且重新上传项目数据
例如上传时候
//上传并显示
@RequestMapping("/updateimg2")
@ResponseBody
public Map<String, Object> updateimg2(MultipartFile file,>
以上就是关于springmvc 怎么将文件上传到linux服务器全部的内容,包括:springmvc 怎么将文件上传到linux服务器、如何用SpringBoot框架来接收multipart/form-data文件、java-SpringMVC 后台怎么获取前台jsp页面中file中的文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)