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>

這裏上傳的文件只是原文件,是沒有經過壓縮的,當然上傳文件的方式是有很多的,若果想要改成上傳壓縮文件,或者做一些其他的修改,可以參考這裏


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章