千家信息网

用SpringMVC+MongoDB+Layui实现文件的上传、下载和删除功能

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要讲解了"用SpringMVC+MongoDB+Layui实现文件的上传、下载和删除功能",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"用Sp
千家信息网最后更新 2026年11月01日用SpringMVC+MongoDB+Layui实现文件的上传、下载和删除功能

这篇文章主要讲解了"用SpringMVC+MongoDB+Layui实现文件的上传、下载和删除功能",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"用SpringMVC+MongoDB+Layui实现文件的上传、下载和删除功能"吧!

应项目要求,使用MongoDB的GridFS来存储文件数据。

需求点:1、要求可实现多文件上传;2、可以动态新增、删除文件列表中的文件;3、使用文件ID下载;4、支持跨域;

提示:SpringMVC在4.2版本中有快捷的跨域处理方式@CrossOrigin

第一步:使用LayUI的upload控件编写JSP页面。

文件名大小状态操作

第二步:编写JS代码

第三步:使用SpringMVC+MongDB+GridFS处理文件上传、下载、删除操作

1)applicationContext-dao.xml文件配置。(此文件还可以使用Properties文件进行配置,亦可以再丰富mongo的相关属性)

                                    

2)application-service.xml的配置。

        

3)springmv.xml文件的配置。

                                                                                                                                                        

4)编写业务层接口,主要包括以下几个方法。

public interface IFileService {        ResponseResult storeUploadFile(MultipartFile file, String applyCode);                ResponseEntity attachmentDownload(String fileId);                ResponseResult attachmentList(String applyCode);                ResponseResult attachmentDelete(String fileId);}

5)编写业务层实现类。

@Servicepublic class FileService implements IFileService {        @Autowired        GridFsTemplate gridFsTemplate;                @Value("${FILE_SERVER_BASEURL}")        private String FILE_SERVER_BASEURL;        @Override        public ResponseResult storeUploadFile(MultipartFile file, String applyCode) {                DBObject metadata = new BasicDBObject();                metadata.put("applyCode", applyCode);                metadata.put("originalFilename", file.getOriginalFilename());//保存原始的文件名                metadata.put("contentType", file.getContentType());                String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));                String fileName = IDUtils.genItemId() + suffix;//处理存储的文件名字                GridFSFile gridFSFile = null;                try {                        gridFSFile = gridFsTemplate.store(file.getInputStream(), fileName, metadata);                } catch (IOException e) {                        e.printStackTrace();                        return ResponseResult.FAIL();                }                String fileId = gridFSFile.getId().toString();                String resultUrl = FILE_SERVER_BASEURL+"/attachment/download/" + fileId;                Map data = new HashMap<>();                data.put("src", resultUrl);                data.put("fileId", fileId);                return ResponseResult.OK(data);        }        @Override        public ResponseEntity attachmentDownload(String fileId) {                Query query = new Query(Criteria.where("_id").is(fileId));                GridFSDBFile gridFsDbFile = gridFsTemplate.findOne(query);                String fileName = gridFsDbFile.getMetaData().get("originalFilename").toString();                try {                        fileName = new String(fileName.getBytes("UTF-8"),"iso-8859-1");//文件名转码                } catch (UnsupportedEncodingException e) {                        e.printStackTrace();                }                HttpHeaders header = new HttpHeaders();                header.setContentType(MediaType.valueOf(gridFsDbFile.getMetaData().get("contentType").toString()));                header.setContentDispositionFormData("attachment", fileName);                InputStreamResource resource = new InputStreamResource(gridFsDbFile.getInputStream());                return new ResponseEntity<>(resource,header,HttpStatus.CREATED);        }        @Override        public ResponseResult attachmentList(String applyCode) {                Query query = new Query(new Criteria().is("{'metadata':{'applyCode':'" + applyCode + "'}})"));//通过metadata中的applyCode获取当前申请单中所有的文件列表。                List fsFileList = gridFsTemplate.find(query);                List fileNameList = new ArrayList();                for(GridFSDBFile file : fsFileList) {                        fileNameList.add(file.getMetaData().get("originalFilename").toString());                }                return ResponseResult.OK(fileNameList);        }        @Override        public ResponseResult attachmentDelete(String fileId) {                Query query = new Query(Criteria.where("_id").is(fileId));                gridFsTemplate.delete(query);                return ResponseResult.SUCCESS();        }}

注意:此实现类中使用了SpringMVC中ResponseEntity的方式进行文件的下载。

6)Controller层。

@RestControllerpublic class AttachController {        @Autowired        IFileService fileService;                @CrossOrigin("http://localhost:8081")        @RequestMapping(value="/attachment/upload",method=RequestMethod.POST)        @ResponseBody        public ResponseResult attachmentUpload(@RequestParam(value = "file") MultipartFile file,String applyCode) {                return fileService.storeUploadFile(file, applyCode);        }                @CrossOrigin("http://localhost:8081")        @RequestMapping(value="/attachment/download/{fileId}",method=RequestMethod.GET)        public ResponseEntity attachmentDownload(@PathVariable String fileId){                return fileService.attachmentDownload(fileId);        }                @CrossOrigin("http://localhost:8081")        @RequestMapping(value="/attachment/list",method=RequestMethod.POST)        @ResponseBody        public ResponseResult attachmentList(String applyCode) {                return fileService.attachmentList(applyCode);        }                @CrossOrigin("http://localhost:8081")        @RequestMapping("/attachment/delete")        @ResponseBody        public ResponseResult attachmentDelete(String fileId) {                return fileService.attachmentDelete(fileId);        }}

注意:

1)LayUI的多文件上传其实为多文件逐个文件上传,也就是将文件数组中的文件循环调用文件上传方法。

2)此Service层中的文件上传的方法为单文件的方式,若为原始或其他前端实现可稍微改造即可。

感谢各位的阅读,以上就是"用SpringMVC+MongoDB+Layui实现文件的上传、下载和删除功能"的内容了,经过本文的学习后,相信大家对用SpringMVC+MongoDB+Layui实现文件的上传、下载和删除功能这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

文件 功能 成功 配置 文件名 方式 方法 处理 学习 原始 业务 内容 数组 队列 存储 选择 也就是 代码 前端 单个 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网高科技 上海挚品互联网科技有限公司 互联网公司 科技公司 深圳互联网科技公司 互联网金融科技平台 壕鑫互联网络科技 深圳互联网科技怎么样 广州慧亚互联网科技怎么样 南平创想时代互联网科技有限公司 米聚互联网科技南京有限公司排面 中国科技创新与世界互联网大会 河南住房之家互联网科技 工业互联网等科技实现智能化赋能 无锡工业互联网科技有限公司 黑云互联网科技有限公司 广州百诚互联网科技有限公司官网 江苏互联网智能科技产品出厂价 北京互联网科技类企业分布 恒生互联网科技趋势 互联网科技创业有什么好项目 互联网金融科技 互联网和科技技术 互联网巨头反垄断金融科技 互联网科技公司电话 受益于互联网科技的高速发展 荆州市昕露互联网络科技有限公司 江苏互联网智能科技软件 湖北辰鑫科技互联网 互联网的黑科技实验室 互联网企业和网络科技有限公司
0