Spring-MVC框架实现文件的上传、修改、下载

   要使用Spring-MVC框架实现文件的上传、修改、下载,代码到不是很多,只是需要多个类来实现,这里使用我所写过的项目里的Version实体来说明-->

首先看一下数据库里的表Versions字段:(waraddress、sqladdress就是要上传的文件真实名字,warrealname、sqlrealname是上传前的文件名字)

id 系统类型id , waraddress war包地址,sqladdress ,sql脚本地址 ,descr 说明 , warrealname  war包源名, sqlrealname sql脚本源名, svnaddress  软件svn地址 , vername  版本名称 , verno  版本号


最基础的实体类:Version类最简单就不看了

DAO层:VersionMapper类--》部分代码

//用于修改记录,注意这里更新的字段里没有文件的名字waraddress 、sqlrealname 、sqladdress 、warrealname  

@Update("UPDATE versions SET typeid=#{typeid},descr=#{descr},vername=#{vername},svnaddress=#{svnaddress},verno=#{verno} WHERE id=#{id}")

void updateVersion(Version version);


//用户插入记录

void addVersion(Version version);

//修改上传的war类文件名

@Update("UPDATE versions SET waraddress=#{waraddress},warrealname=#{warrealname} where id=#{id}")

void updateVersionWaraddress(Version version);

//修改上传的sql类文件名

@Update("UPDATE versions SET sqladdress=#{sqladdress},sqlrealname=#{sqlrealname} where id=#{id}")

void updateVersionSqladdress(Version version);

Service服务层:VersionService类--》部分代码

void updateVersion(Version version);


void addVersion(Version version);

void updateVersionWaraddress(Version version);


void updateVersionSqladdress(Version version);

Service服务层:VersionServiceImp类--》部分代码

@Autowired

VersionMapper versionMapper;

@Override

public void updateVersion(Version version) {

versionMapper.updateVersion(version);

}

@Override

public void addVersion(Version version) {

versionMapper.addVersion(version);



}

@Override

public void updateVersionWaraddress(Version version) {

versionMapper.updateVersionWaraddress(version);


}

@Override

public void updateVersionSqladdress(Version version) {

versionMapper.updateVersionSqladdress(version);


}

最重要的Controller控制层:VersionController类--》部分代码

@RequestMapping(value = "/version_add")

public String versionAdd(ModelMap model, Version version, HttpServletRequest request, @RequestParam MultipartFile[] myfiles){

Long id = version.getId();

Version version2 = versionService.loadVersionById(id);

if (id != null) {

//修改记录

versionService.updateVersion(version);

}else {

//增加记录

versionService.addVersion(version);

}

//获取文件保存的路径

String fileDir = request.getSession().getServletContext().getRealPath("resources/file");

//修改前的war、sql文件

File preWarFile = new File(fileDir + File.separator +version2.getWaraddress());

File preSqlFile = new File(fileDir + File.separator +version2.getSqladdress());

//上传、修改文件

for(int i = 0;i < 2;i++){

MultipartFile myfile = myfiles[i];

if(!myfile.isEmpty()){

//真实文件名

String realname = myfile.getOriginalFilename();

String suffix = realname.substring(realname.lastIndexOf("."));

//重命名文件

Long now = Long.parseLong(new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()));

Long random = (long) (Math.random() * now);

String filename = now + "" + random + suffix.toLowerCase();  

if(i == 0){

version.setWaraddress(filename);

version.setWarrealname(realname);

//更新文件名

versionService.updateVersionWaraddress(version);

//删除修改前的文件

if(preWarFile.exists()){

preWarFile.delete();

}

}

if(i == 1){

version.setSqladdress(filename);

version.setSqlrealname(realname);

//更新文件名

versionService.updateVersionSqladdress(version);

//删除修改前的文件

if(preSqlFile.exists()){

preSqlFile.delete();

}

}

File file = new File(fileDir + File.separator + filename);

try {

//开始上传文件

myfile.transferTo(file);

} catch (IllegalStateException | IOException e) {

e.printStackTrace();

}

}

}

return "redirect:version_list";

}

View视图层:list.jsp--》部分代码

(在页面直接写文件所在的路径,页面上点击就可以直接下载了)

<td style="text-align: center;"><a href="${root}/resources/file/${version.waraddress}" title="${version.warrealname}">下载</a></td>

<td style="text-align: center;"><a href="${root}/resources/file/${version.sqladdress}" title="${version.sqlrealname}">下载</a></td>

这里上传的文件只是原文件,是没有经过压缩的,当然上传文件的方式是有很多的,若果想要改成上传压缩文件,或者做一些其他的修改,可以参考这里


本文出自 “Java一样的少年” 博客,请务必保留此出处http://zhengjiang.blog.51cto.com/8568971/1359719

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。