spring boot中檔案的上傳
阿新 • • 發佈:2018-11-01
在spring boot中上傳檔案,這時候,在HTML中將檔案的type設定為file型別。
然後在資料庫裡邊儲存的時候,實際上庫裡儲存的是檔案的檔案的型別,檔名,以及檔案的URL路徑,真正的檔案是儲存在伺服器上的。
controller層:
package com.bootdo.common.controller; import com.bootdo.common.config.BootdoConfig; import com.bootdo.common.domain.FileDO; import com.bootdo.common.service.FileService; import com.bootdo.common.utils.*; import javax.servlet.http.HttpServletRequest; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 檔案上傳 * * @author chglee * @email
[email protected] * @date 2017-09-19 16:02:20 */ @Controller @RequestMapping("/common/sysFile") public class FileController extends BaseController { @Autowired private FileService sysFileService; @Autowired private BootdoConfig bootdoConfig; @GetMapping() @RequiresPermissions("common:sysFile:sysFile") String sysFile(Model model) { Map<String, Object> params = new HashMap<>(16); return "common/file/file"; } @ResponseBody @GetMapping("/list") @RequiresPermissions("common:sysFile:sysFile") public PageUtils list(@RequestParam Map<String, Object> params) { // 查詢列表資料 Query query = new Query(params); List<FileDO> sysFileList = sysFileService.list(query); int total = sysFileService.count(query); PageUtils pageUtils = new PageUtils(sysFileList, total); return pageUtils; } @GetMapping("/add") // @RequiresPermissions("common:bComments") String add() { return "common/sysFile/add"; } @GetMapping("/edit") // @RequiresPermissions("common:bComments") String edit(Long id, Model model) { FileDO sysFile = sysFileService.get(id); model.addAttribute("sysFile", sysFile); return "common/sysFile/edit"; } /** * 資訊 */ @RequestMapping("/info/{id}") @RequiresPermissions("common:info") public R info(@PathVariable("id") Long id) { FileDO sysFile = sysFileService.get(id); return R.ok().put("sysFile", sysFile); } /** * 儲存 */ @ResponseBody @PostMapping("/save") @RequiresPermissions("common:save") public R save(FileDO sysFile) { if (sysFileService.save(sysFile) > 0) { return R.ok(); } return R.error(); } /** * 修改 */ @RequestMapping("/update") @RequiresPermissions("common:update") public R update(@RequestBody FileDO sysFile) { sysFileService.update(sysFile); return R.ok(); } /** * 刪除 */ @PostMapping("/remove") @ResponseBody // @RequiresPermissions("common:remove") public R remove(Long id, HttpServletRequest request) { if ("test".equals(getUsername())) { return R.error(1, "演示系統不允許修改,完整體驗請部署程式"); } String fileName = bootdoConfig.getUploadPath() + sysFileService.get(id).getUrl().replace("/files/", ""); if (sysFileService.remove(id) > 0) { boolean b = FileUtil.deleteFile(fileName); if (!b) { return R.error("資料庫記錄刪除成功,檔案刪除失敗"); } return R.ok(); } else { return R.error(); } } /** * 刪除 */ @PostMapping("/batchRemove") @ResponseBody @RequiresPermissions("common:remove") public R remove(@RequestParam("ids[]") Long[] ids) { if ("test".equals(getUsername())) { return R.error(1, "演示系統不允許修改,完整體驗請部署程式"); } sysFileService.batchRemove(ids); return R.ok(); } @ResponseBody @PostMapping("/upload") R upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) { if ("test".equals(getUsername())) { return R.error(1, "演示系統不允許修改,完整體驗請部署程式"); } String fileName = file.getOriginalFilename(); fileName = FileUtil.renameToUUID(fileName); FileDO sysFile = new FileDO(FileType.fileType(fileName), "/files/" + fileName, new Date()); try { FileUtil.uploadFile(file.getBytes(), bootdoConfig.getUploadPath(), fileName); } catch (Exception e) { return R.error(); } if (sysFileService.save(sysFile) > 0) { return R.ok().put("fileName",sysFile.getUrl()); } return R.error(); } }
實體類:
package com.bootdo.common.domain; import java.io.Serializable; import java.util.Date; /** * 檔案上傳 * * @author chglee * @email [email protected] * @date 2017-09-19 16:02:20 */ public class FileDO implements Serializable { private static final long serialVersionUID = 1L; // private Long id; // 檔案型別 private Integer type; // URL地址 private String url; // 建立時間 private Date createDate; public FileDO() { super(); } public FileDO(Integer type, String url, Date createDate) { super(); this.type = type; this.url = url; this.createDate = createDate; } /** * 設定: */ public void setId(Long id) { this.id = id; } /** * 獲取: */ public Long getId() { return id; } /** * 設定:檔案型別 */ public void setType(Integer type) { this.type = type; } /** * 獲取:檔案型別 */ public Integer getType() { return type; } /** * 設定:URL地址 */ public void setUrl(String url) { this.url = url; } /** * 獲取:URL地址 */ public String getUrl() { return url; } /** * 設定:建立時間 */ public void setCreateDate(Date createDate) { this.createDate = createDate; } /** * 獲取:建立時間 */ public Date getCreateDate() { return createDate; } @Override public String toString() { return "FileDO{" + "id=" + id + ", type=" + type + ", url='" + url + '\'' + ", createDate=" + createDate + '}'; } }
dao層
package com.bootdo.common.dao;
import com.bootdo.common.domain.FileDO;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Mapper;
/**
* 檔案上傳
* @author chglee
* @email [email protected]
* @date 2017-10-03 15:45:42
*/
@Mapper
public interface FileDao {
FileDO get(Long id);
List<FileDO> list(Map<String,Object> map);
int count(Map<String,Object> map);
int save(FileDO file);
int update(FileDO file);
int remove(Long id);
int batchRemove(Long[] ids);
}
service層:
package com.bootdo.common.service;
import com.bootdo.common.domain.FileDO;
import java.util.List;
import java.util.Map;
/**
* 檔案上傳
*
* @author chglee
* @email [email protected]
* @date 2017-09-19 16:02:20
*/
public interface FileService {
FileDO get(Long id);
List<FileDO> list(Map<String, Object> map);
int count(Map<String, Object> map);
int save(FileDO sysFile);
int update(FileDO sysFile);
int remove(Long id);
int batchRemove(Long[] ids);
/**
* 判斷一個檔案是否存在
* @param url FileDO中存的路徑
* @return
*/
Boolean isExist(String url);
}
serviceImpl層:
package com.bootdo.common.service.impl;
import com.bootdo.common.config.BootdoConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.File;
import java.util.List;
import java.util.Map;
import com.bootdo.common.dao.FileDao;
import com.bootdo.common.domain.FileDO;
import com.bootdo.common.service.FileService;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
@Service
public class FileServiceImpl implements FileService {
@Autowired
private FileDao sysFileMapper;
@Autowired
private BootdoConfig bootdoConfig;
@Override
public FileDO get(Long id){
return sysFileMapper.get(id);
}
@Override
public List<FileDO> list(Map<String, Object> map){
return sysFileMapper.list(map);
}
@Override
public int count(Map<String, Object> map){
return sysFileMapper.count(map);
}
@Override
public int save(FileDO sysFile){
return sysFileMapper.save(sysFile);
}
@Override
public int update(FileDO sysFile){
return sysFileMapper.update(sysFile);
}
@Override
public int remove(Long id){
return sysFileMapper.remove(id);
}
@Override
public int batchRemove(Long[] ids){
return sysFileMapper.batchRemove(ids);
}
@Override
public Boolean isExist(String url) {
Boolean isExist = false;
if (!StringUtils.isEmpty(url)) {
String filePath = url.replace("/files/", "");
filePath = bootdoConfig.getUploadPath() + filePath;
File file = new File(filePath);
if (file.exists()) {
isExist = true;
}
}
return isExist;
}
}
XML檔案:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bootdo.common.dao.FileDao">
<select id="get" resultType="com.bootdo.common.domain.FileDO">
select `id`,`type`,`url`,`create_date` from sys_file where id = #{value}
</select>
<select id="list" resultType="com.bootdo.common.domain.FileDO">
select `id`,`type`,`url`,`create_date` from sys_file
<where>
<if test="id != null and id != ''"> and id = #{id} </if>
<if test="type != null and type != ''"> and type = #{type} </if>
<if test="url != null and url != ''"> and url = #{url} </if>
<if test="createDate != null and createDate != ''"> and create_date = #{createDate} </if>
</where>
<choose>
<when test="sort != null and sort.trim() != ''">
order by ${sort} ${order}
</when>
<otherwise>
order by id desc
</otherwise>
</choose>
<if test="offset != null and limit != null">
limit #{offset}, #{limit}
</if>
</select>
<select id="count" resultType="int">
select count(*) from sys_file
<where>
<if test="id != null and id != ''"> and id = #{id} </if>
<if test="type != null and type != ''"> and type = #{type} </if>
<if test="url != null and url != ''"> and url = #{url} </if>
<if test="createDate != null and createDate != ''"> and create_date = #{createDate} </if>
</where>
</select>
<insert id="save" parameterType="com.bootdo.common.domain.FileDO" useGeneratedKeys="true" keyProperty="id">
insert into sys_file
(
`type`,
`url`,
`create_date`
)
values
(
#{type},
#{url},
#{createDate}
)
</insert>
<update id="update" parameterType="com.bootdo.common.domain.FileDO">
update sys_file
<set>
<if test="type != null">`type` = #{type}, </if>
<if test="url != null">`url` = #{url}, </if>
<if test="createDate != null">`create_date` = #{createDate}</if>
</set>
where id = #{id}
</update>
<delete id="remove">
delete from sys_file where id = #{value}
</delete>
<delete id="batchRemove">
delete from sys_file where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
</mapper>