web.xml、applicationContext.xml配置不变。
mvc-servlet.xml添加
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" >
<property name="defaultEncoding" value="utf-8"/>
<property name="maxUploadSize" value="104857600"/>
<property name="maxInMemorySize" value="4096"/>
</bean>
1、上传单个文件
form表单:
<form action="upload.shtml" enctype="multipart/form-data" method="post"><input id="file" type="file" name="file" />
<br/><input type="submit" value="提交" />
</form>
java代码:
@RequestMapping("upload.shtml")
public String uploadFile(HttpServletRequest request, HttpServletResponse response){
MultipartHttpServletRequest mutipartHttpServletRequest = (MultipartHttpServletRequest) request;
MultipartFile multipartFile = mutipartHttpServletRequest.getFile("file");
String fileName = multipartFile.getOriginalFilename();
String filePath = request.getServletContext().getRealPath(File.separator+"upload");
//System.out.println(filePath);
File fileDrect = new File(filePath);
if(!fileDrect.exists()){
fileDrect.mkdirs();
}
File upoloadFile = new File(fileDrect,fileName);
FileOutputStream fileOutputStream = null;
try {
fileOutputStream = new FileOutputStream(upoloadFile);
FileCopyUtils.copy(multipartFile.getBytes(), fileOutputStream);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return "success";
}
2、上传单个文件
form表单:
<form action="upload1.shtml" enctype="multipart/form-data" method="post">
<input id="file1" type="file" name="file" />
<br/><input type="submit" value="提交" />
</form>
java代码:
@RequestMapping("upload1.shtml")
public String uploadFile1(@RequestParam("file") MultipartFile multipartFile,HttpServletRequest request){
String fileName = multipartFile.getOriginalFilename();
String filePath = request.getServletContext().getRealPath(File.separator+"upload");
System.out.println(filePath);
File fileDrect = new File(filePath);
if(!fileDrect.exists()){
fileDrect.mkdirs();
}
File upoloadFile = new File(fileDrect,fileName);
FileOutputStream fileOutputStream = null;
try {
fileOutputStream = new FileOutputStream(upoloadFile);
FileCopyUtils.copy(multipartFile.getBytes(), fileOutputStream);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return "success";
}
3、多文件上传
form:
<form action="uploadFiles.shtml" enctype="multipart/form-data" method="post">
<!-- name属性不能相同 -->
<input id="file2" type="file" name="file" /><br/>
<input id="file3" type="file" name="file1" /><br/>
<input id="file4" type="file" name="file2" /><br/>
<br/><input type="submit" value="提交" />
</form>
java代码:
@RequestMapping("uploadFiles.shtml")
public String uploadFiles(HttpServletRequest request){
MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> fileMap = multipartHttpServletRequest.getFileMap();
String filePath = request.getServletContext().getRealPath(File.separator+"upload");
File fileDrect = new File(filePath);
if(!fileDrect.exists()){
fileDrect.mkdirs();
}
for(Map.Entry<String, MultipartFile> entry : fileMap.entrySet()){
MultipartFile multipartFile = entry.getValue();
if(multipartFile.isEmpty())
continue;
String fileName = multipartFile.getOriginalFilename();
File uploadFile = new File(fileDrect, fileName);
System.out.println(uploadFile.getAbsolutePath());
try {
FileCopyUtils.copy(multipartFile.getBytes(), uploadFile);
} catch (IOException e) {
e.printStackTrace();
}
}
return "success";
}
4、文件下载
下载链接:
<a href="download.shtml?fileName=123456.txt" >文件下载</a>
java代码:
@RequestMapping("download.shtml")
public String downLoadFile(String fileName, HttpServletRequest request, HttpServletResponse response) throws IOException{
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("UTF-8");
BufferedInputStream bufferedInputStream = null;
BufferedOutputStream bufferedOutputStream = null;
String filePath = request.getServletContext().getRealPath(File.separator+"upload");
File fileDrect = new File(filePath);
if(!fileDrect.exists()){
fileDrect.mkdirs();
}
File downFile = new File(fileDrect, fileName);
long fileLength = downFile.length();
response.setContentType("application/x-msdownload;");
response.setHeader("Content-disposition", "attachment; filename=" + new String(fileName.getBytes("utf-8"), "ISO8859-1"));
response.setHeader("Content-Length", String.valueOf(fileLength));
bufferedInputStream = new BufferedInputStream(new FileInputStream(downFile));
bufferedOutputStream = new BufferedOutputStream(response.getOutputStream());
byte[] buff = new byte[1024];
int bytesRead = -1;
while (-1 != (bytesRead = bufferedInputStream.read(buff))) {
bufferedOutputStream.write(buff, 0, bytesRead);
}
bufferedInputStream.close();
bufferedOutputStream.close();
return "success";
}
5、替换选择上传文件按钮文字
<form action="upload.shtml" enctype="multipart/form-data" method="post">
<input id="file" type="file" name="file" style="display: none"/><input type="button" value="选择文件" οnclick="showBrowse()" />
<br/><input type="submit" value="提交" />
</form>
<script type="text/javascript">
function showBrowse(){
var file = document.getElementById("file");
if(file){
file.click();
}
}
</script>