springmvc文件上传与下载.docx
《springmvc文件上传与下载.docx》由会员分享,可在线阅读,更多相关《springmvc文件上传与下载.docx(15页珍藏版)》请在冰豆网上搜索。
springmvc文件上传与下载
上传样式,中文文件名,文件名重复处理
1. [代码]action
packagecom.action;
importjava.io.File;
importjava.io.IOException;
importjava.util.HashMap;
importjava.util.Map;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.servlet.ModelAndView;
importcom.util.FileOperateUtil;
@Controller
@RequestMapping(value="fileOperate")
publicclassFileOperateAction{
@RequestMapping(value="upload")
publicStringupload(HttpServletRequestrequest){
init(request);
try{
FileOperateUtil.upload(request);
request.setAttribute("msg","ok");
request.setAttribute("map",getMap());
}catch(Exceptione){
e.printStackTrace();
}
return"redirect:
list";
}
@RequestMapping(value="list")
publicModelAndViewlist(HttpServletRequestrequest){
init(request);
request.setAttribute("map",getMap());
returnnewModelAndView("fileOperate/list");
}
@RequestMapping(value="download")
publicvoiddownload(HttpServletRequestrequest,HttpServletResponseresponse){
init(request);
try{
StringdownloadfFileName=request.getParameter("filename");
downloadfFileName=newString(downloadfFileName.getBytes("iso-8859-1"),"utf-8");
StringfileName=downloadfFileName.substring(downloadfFileName.indexOf("_")+1);
StringuserAgent=request.getHeader("User-Agent");
byte[]bytes=userAgent.contains("MSIE")?
fileName.getBytes():
fileName.getBytes("UTF-8");
fileName=newString(bytes,"ISO-8859-1");
response.setHeader("Content-disposition",String.format("attachment;filename=\"%s\"",fileName));
FileOperateUtil.download(downloadfFileName,response.getOutputStream());
}catch(IOExceptione){
e.printStackTrace();
}
}
privatevoidinit(HttpServletRequestrequest){
if(FileOperateUtil.FILEDIR==null){
FileOperateUtil.FILEDIR=request.getSession().getServletContext().getRealPath("/")+"file/";
}
}
privateMapgetMap(){
Mapmap=newHashMap();
File[]files=newFile(FileOperateUtil.FILEDIR).listFiles();
if(files!
=null){
for(Filefile:
files){
if(file.isDirectory()){
File[]files2=file.listFiles();
if(files2!
=null){
for(Filefile2:
files2){
Stringname=file2.getName();
map.put(file2.getParentFile().getName()+"/"+name,name.substring(name.lastIndexOf("_")+1));
}
}
}
}
}
returnmap;
}
}
2. [代码]util
packagecom.util;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.OutputStream;
importjava.util.Date;
importjava.util.Iterator;
importjava.util.Map;
importjavax.servlet.ServletOutputStream;
importjavax.servlet.http.HttpServletRequest;
importorg.springframework.web.multipart.MultipartFile;
importorg.springframework.web.multipart.MultipartHttpServletRequest;
publicclassFileOperateUtil{
publicstaticStringFILEDIR=null;
/**
*上传
*@paramrequest
*@throwsIOException
*/
publicstaticvoidupload(HttpServletRequestrequest)throwsIOException{
MultipartHttpServletRequestmRequest=(MultipartHttpServletRequest)request;
MapfileMap=mRequest.getFileMap();
Filefile=newFile(FILEDIR);
if(!
file.exists()){
file.mkdir();
}
Iterator>it=fileMap.entrySet().iterator();
while(it.hasNext()){
Map.Entryentry=it.next();
MultipartFilemFile=entry.getValue();
if(mFile.getSize()!
=0&&!
"".equals(mFile.getName())){
write(mFile.getInputStream(),newFileOutputStream(initFilePath(mFile.getOriginalFilename())));
}
}
}
privatestaticStringinitFilePath(Stringname){
Stringdir=getFileDir(name)+"";
Filefile=newFile(FILEDIR+dir);
if(!
file.exists()){
file.mkdir();
}
Longnum=newDate().getTime();
Doubled=Math.random()*num;
return(file.getPath()+"/"+num+d.longValue()+"_"+name).replaceAll("","-");
}
privatestaticintgetFileDir(Stringname){
returnname.hashCode()&0xf;
}
publicstaticvoiddownload(StringdownloadfFileName,ServletOutputStreamout){
try{
FileInputStreamin=newFileInputStream(newFile(FILEDIR+"/"+downloadfFileName));
write(in,out);
}catch(FileNotFoundExceptione){
try{
FileInputStreamin=newFileInputStream(newFile(FILEDIR+"/"
+newString(downloadfFileName.getBytes("iso-8859-1"),"utf-8")));
write(in,out);
}catch(IOExceptione1){
e1.printStackTrace();
}
}catch(IOExceptione){
e.printStackTrace();
}
}
/**
*写入数据
*@paramin
*@paramout
*@throwsIOException
*/
publicstaticvoidwrite(InputStreamin,OutputStreamout)throwsIOException{
try{
byte[]buffer=newbyte[1024];
intbytesRead=-1;
while((bytesRead=in.read(buffer))!
=-1){
out.write(buffer,0,bytesRead);
}
out.flush();
}finally{
try{
in.close();
}
catch(IOExceptionex){
}
try{
out.close();
}
catch(IOExceptionex){
}
}
}
}
3. [代码]springmvc-context.xml
xmlversion="1.0"encoding="UTF-8"?
>
//www.springframework.org/schema/beans"
xmlns:
xsi="http:
//www.w3.org/2001/XMLSchema-instance"
xmlns:
p="http:
//www.springframework.org/schema/p"
xmlns:
mvc="http:
//www.springframework.org/schema/mvc"
xmlns:
context="http:
//www.springframework.org/schema/context"
xsi:
schemaLocation="
http:
//www.springframework.org/schema/beans
http:
//www.springframework.org/schema/beans/spring-beans.xsd
http:
//www.springframework.org/schema/mvc
http:
//www.springframework.org/schema/mvc/spring-mvc.xsd
http:
//www.springframework.org/schema/context
http:
//www.springframework.org/schema/context/spring-context.xsd">
component-scanbase-package="com.action"/>
annotation-driven/>
defaultEncoding="UTF-8"/>
4. [代码]list.jsp
<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"contentType="text/html;charset=UTF-8" %>
<%@taglibprefix="c"uri="
<%
StringbasePath=request.getScheme()+":
//"+request.getServerName()+":
"+request.getServerPort()+request.getContextPath()+"/";
%>
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
list
a:
link{
text-decoration:
none;
}
a:
visited{
text-decoration:
none;
}
a:
hover{
color:
#999999;
text-decoration:
underline;
}
forEachitems="${map}"var="v">
fileOperate/download?
filename=${v.key}">${v.value}
forEach>
fileOperate/upload.jsp">上传文件
5. [代码]upload.jsp
<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
<%
StringbasePath=request.getScheme()+":
//"+request.getServerName()+":
"+request.getServerPort()+request.getContextPath()+"/";
%>
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
upload
.input{
width:
80px;
height:
20px;
line-height:
20px;
background:
#0088ff;
text-align:
center;
display:
inline-block;
overflow:
hidden;
position:
relative;
text-decoration:
none;
top:
5px;
}
.input:
hover{
background:
#ff8800;
}
.file{
opacity:
0;
filter:
alpha(opacity= 0);
font-size:
50px;
position:
absolute;
top:
0;
right:
0;
}
a:
link{
text-decoration:
none;
}
a:
visited{
text-decoration:
none;
}
a:
hover{
color:
#999999;