在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 params = new HashMap<>(16);
return "common/file/file";
}
@ResponseBody
@GetMapping("/list")
@RequiresPermissions("common:sysFile:sysFile")
public PageUtils list(@RequestParam Map params) {
// 查询列表数据
Query query = new Query(params);
List 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 list(Map map);
int count(Map 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 list(Map map);
int count(Map 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 list(Map map){
return sysFileMapper.list(map);
}
@Override
public int count(Map 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文件:
insert into sys_file
(
`type`,
`url`,
`create_date`
)
values
(
#{type},
#{url},
#{createDate}
)
update sys_file
`type` = #{type},
`url` = #{url},
`create_date` = #{createDate}
where id = #{id}
delete from sys_file where id = #{value}
delete from sys_file where id in
#{id}