- 浏览: 496476 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (502)
- Java (70)
- Linux (10)
- 数据库 (38)
- 网络 (10)
- WEB (13)
- JSP (4)
- 互联网 (71)
- JavaScript (30)
- Spring MVC (19)
- HTML (13)
- CSS (3)
- AngularJS (18)
- Redis (5)
- Bootstrap CSS (1)
- ZooKeeper (4)
- kafka (6)
- 服务器缓存 (4)
- Storm (1)
- MongoDB (9)
- Spring boot (16)
- log4j (2)
- maven (3)
- nginx (5)
- Tomcat (2)
- Eclipse (4)
- Swagger (2)
- Netty (5)
- Dubbo (1)
- Docker (7)
- Hadoop (12)
- OAuth (1)
- webSocket (4)
- 服务器性能 (7)
- Session共享 (1)
- tieye修改 (1)
- 工作 (1)
- 有用的语录 (0)
- https (2)
- common (5)
- 产品开发管理 (1)
- CDN 工作原理 (1)
- APNS、GCM (1)
- 架构图 (3)
- 功能实现分析 (1)
- JMX (1)
- 服务器相关操作命令 (1)
- img02 (0)
- 服务器环境搭建 (9)
- goodMenuBook (1)
- CEInstantPot (0)
- 有用数据 (1)
- 百度地图WEB API (2)
- 正则表达式 (1)
- 样式例子 (2)
- staticRecipePressureCooker.zip (1)
- jCanvas (1)
- 网站攻击方法原理 (1)
- 架构设计 (3)
- 物联网相关 (3)
- 研发管理 (7)
- 技术需求点 (1)
- 计划 (1)
- spring cloud (11)
- 服务器开发的一些实用工具和方法 (1)
- 每天学到的技术点 (4)
- Guava (1)
- ERP 技术注意要点 (2)
- 微信小程序 (1)
- FineRepor (1)
- 收藏夹 (1)
- temp (5)
- 服务架构 (4)
- 任职资格方案 (0)
- osno_test (1)
- jquery相关 (3)
- mybatis (4)
- ueditor (1)
- VueJS (7)
- python (10)
- Spring EL (1)
- shiro (1)
- 前端开发原理与使用 (7)
- YARN (1)
- Spark (1)
- Hbase (2)
- Pig (2)
- 机器学习 (30)
- matplotlib (1)
- OpenCV (17)
- Hystrix (1)
- 公司 (1)
- miniui (4)
- 前端功能实现 (3)
- 前端插件 (1)
- 钉钉开发 (2)
- Jenkins (1)
- elasticSearch使用 (2)
- 技术规范 (4)
- 技术实现原理 (0)
最新评论
@RequestMapping (value="/downloadSalesReport") @ResponseBody public void downloadSalesReport( String id,HttpServletResponse response) throws Exception { BufferedInputStream in = null; BufferedOutputStream out = null; try { String fileName = "D:\\salesReportTest\\12345.xlsx"; String fileOutName = "测试salesReport.xlsx"; fileOutName = new String(fileOutName.getBytes("UTF-8"), "ISO8859-1"); // action.setFilename(new String(fileName.getBytes("gbk"),"iso8859-1")); File file = new File(fileName); in = new BufferedInputStream(new FileInputStream(file)); out = new BufferedOutputStream(response.getOutputStream()); response.setContentType(new MimetypesFileTypeMap().getContentType(file));// 设置response内容的类型 response.setHeader("Content-disposition", "attachment;filename=" + fileOutName);// 设置头部信息 byte[] buffer = new byte[2048]; int length = 0; while ((length = in.read(buffer)) > 0) { out.write(buffer, 0, length); } out.flush(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (in != null) { in.close(); } if (out != null) { out.close(); } } catch (IOException e) { e.printStackTrace(); } } }
@RequestMapping (value="/downloadSalesReport") @ResponseBody public void downloadSalesReport( String id,HttpServletResponse response) throws Exception { BufferedInputStream in = null; BufferedOutputStream out = null; try { String fileName = "D:\\salesReportTest\\12345.xlsx"; // /usr/HIP/dtomcat_MALL_pre/webapps/images/userfiles/policy // 02d40fb0864941798541850daef8d953.png // File f = File.createTempFile(System.currentTimeMillis() + "_", ".downloadByIds"); // FileOutputStream fo = new FileOutputStream(f); // if(id==null || id.equals("")) { // throw new RuntimeException("id为空"); // } // // SalesReport salesReport = salesReportService.selectById(id); // if(id==null || id.equals("")) { // throw new RuntimeException(id + ":对应的数据不存在"); // } // // // String fileOutName = salesReport.getFileName(); // if(fileOutName==null||fileOutName.equals("")) { // throw new RuntimeException(id + ":对应的数据文件名为空"); // } //// String fileOutName = salesReport.getFileName(); ftpService.downloadFile("/userfiles/policy/02d40fb0864941798541850daef8d953.png",response.getOutputStream()); // String fileName = "D:\\salesReportTest\\12345.xlsx"; // String fileOutName = "测试salesReport.xlsx"; String fileOutName = "测试salesReport.png"; fileOutName = new String(fileOutName.getBytes("UTF-8"), "ISO8859-1"); // action.setFilename(new String(fileName.getBytes("gbk"),"iso8859-1")); // File file = new File(fileName); // in = new BufferedInputStream(new FileInputStream(file)); // out = new BufferedOutputStream(response.getOutputStream()); // response.setContentType(new MimetypesFileTypeMap().getContentType(file));// 设置response内容的类型 // response.setContentType(MediaType.APPLICATION_OCTET_STREAM);// 设置response内容的类型 response.setHeader("Content-disposition", "attachment;filename=" + fileOutName);// 设置头部信息 // byte[] buffer = new byte[2048]; // int length = 0; // while ((length = in.read(buffer)) > 0) { // out.write(buffer, 0, length); // } // out.flush(); } catch (IOException e) { e.printStackTrace(); response.sendError(500, e.getMessage()); } finally { try { if (in != null) { in.close(); } if (out != null) { out.close(); } } catch (IOException e) { e.printStackTrace(); } } }
@RequestMapping(value = "/downloadSalesReport") @ResponseBody public void downloadSalesReport(String id, HttpServletRequest request,HttpServletResponse response) throws Exception { // BufferedInputStream in = null; // BufferedOutputStream out = null; try { // if (id == null || id.equals("")) { // throw new RuntimeException("id为空"); // } // // SalesReport salesReport = salesReportService.selectById(id); // if (id == null || id.equals("")) { // throw new RuntimeException(id + ":对应的数据不存在"); // } // // String fileOutName = salesReport.getFileName(); // if (fileOutName == null || fileOutName.equals("")) { // throw new RuntimeException(id + ":对应的数据文件名为空"); // } // // String folderName = salesReport.getFolderName(); // if (folderName == null || folderName.equals("")) { // throw new RuntimeException(id + ":对应的数据文件路径为空"); // } String fileOutName = "的数据文件dsd.png"; // String fileName = folderName + "/" + fileOutName; String fileName = "/userfiles/policy/02d40fb0864941798541850daef8d953.png"; ftpService.downloadFile(fileName, response.getOutputStream()); //IE与chrome文件名乱码处理 String header = request.getHeader("User-Agent").toUpperCase(); if (header.contains("MSIE") || header.contains("TRIDENT") || header.contains("EDGE")) { fileOutName = URLEncoder.encode(fileOutName, "utf-8"); fileOutName = fileOutName.replace("+", "%20"); //IE下载文件名空格变+号问题 } else { fileOutName = new String(fileOutName.getBytes(), "ISO8859-1"); } response.setContentType("text/html;charset=UTF-8"); response.setHeader("Content-disposition", "attachment;filename=" + fileOutName);// 设置头部信息 } catch (IOException e) { e.printStackTrace(); response.sendError(500, e.getMessage()); } }
//在头部返回特殊信息
@RequestMapping(value = "/downloadSalesReport") @ResponseBody public String downloadSalesReport(String id, HttpServletRequest request, HttpServletResponse response) throws Exception { // BufferedInputStream in = null; // BufferedOutputStream out = null; try { if (id == null || id.equals("")) { throw new RuntimeException("id为空"); } SalesReport salesReport = salesReportService.selectById(id); if (id == null || id.equals("")) { throw new RuntimeException(id + ":对应的数据不存在"); } // int num = salesReport.getDownloaded(); // if (num > 0) { // throw new RuntimeException("已经下载过这文件"); // } String fileOutName = salesReport.getFileName(); if (fileOutName == null || fileOutName.equals("")) { throw new RuntimeException(id + ":对应的数据文件名为空"); } String folderName = salesReport.getFolderName(); if (folderName == null || folderName.equals("")) { throw new RuntimeException(id + ":对应的数据文件路径为空"); } // ----------- SessionUser sessionUser = UserUtils.getCurrentUser(); if (sessionUser == null) { throw new RuntimeException("用户信息为空"); } String loginName = sessionUser.getLoginName(); if (loginName == null || loginName.equals("")) { throw new RuntimeException("用户loginName为空"); } if (folderName.indexOf(loginName) < 0) { throw new RuntimeException(folderName + ":不是当前用户的文件路径"); } // String fileOutName = "的数据文件dsd.png"; String fileName = folderName + "/" + fileOutName; SysLog.log("fileName == " + fileName); // fileOutName = "的数据文件dsd.xlsx"; // IE与chrome文件名乱码处理 String header = request.getHeader("User-Agent").toUpperCase(); if (header.contains("MSIE") || header.contains("TRIDENT") || header.contains("EDGE")) { fileOutName = URLEncoder.encode(fileOutName, "utf-8"); fileOutName = fileOutName.replace("+", "%20"); // IE下载文件名空格变+号问题 } else { fileOutName = new String(fileOutName.getBytes(), "ISO8859-1"); } response.setContentType("text/html;charset=UTF-8"); response.setHeader("Content-disposition", "attachment;filename=" + fileOutName);// 设置头部信息 boolean flag = ftpService.downloadFile(fileName, response.getOutputStream(), "2"); if (!flag) { throw new RuntimeException("FTP获取文件失败"); } // =========理更新信息 salesReport.setDlId(loginName); salesReport.setDlDate(new Date()); salesReport.setDownloaded(1); salesReportService.updateById(salesReport); return null; } catch (Exception e) { e.printStackTrace(); // response.sendError(500, e.getMessage()); // throw e; // return e.getMessage(); response.setHeader("sut", "sutTESTTEST");// 设置头部信息 response.setContentType("application/json;charset=UTF-8"); response.setHeader("Content-disposition", "");// 设置头部信息 response.getOutputStream().write(new String(e.getMessage().getBytes(), "GBK").getBytes()); return null; } // return null; }
https://blog.csdn.net/dreaming317/article/details/82591600
https://blog.csdn.net/z69183787/article/details/80910606
https://blog.csdn.net/qq_30999361/article/details/84820420(在AJAX中发请求下载文件)
//下载不打开
@GetMapping("/getFile/{dbKey}/{id}") @ApiOperation(value = "附件下载", notes = "附件下载", response = String.class) @ResponseBody public ResponseEntity<byte[]> getFile( @ApiParam(name = "dbKey", value = "dbKey", required = true) @PathVariable String dbKey, @ApiParam(name = "id", value = "附件id", required = true) @PathVariable String id) throws Exception { LogUtils.info(id, "getFile"); try { if (dbKey == null || dbKey.equals("") || dbKey.length() > 2) { ExceptionUtils.throwRuntimeException("DbKey不合规则"); } if (id == null || id.equals("")) { ExceptionUtils.throwRuntimeException("文件id不合规则"); } String sql = new BaseScanSqlCommand().getSqlText(this, "FileController.xml", "getFile"); sql = sql.replaceAll("##id##", id); List<Map<String, Object>> mapList = manageServ.getCommonServ(dbKey).getListMapBySQL(sql); if (mapList == null || mapList.size() == 0) { return null; } String name = StringUtils.toNotNullString(mapList.get(0).get("file_name")); HttpHeaders headers = new HttpHeaders(); String fileName = new String(name.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1); headers.setContentDispositionFormData("fileName", fileName); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); ByteArrayOutputStream baos = new ByteArrayOutputStream(); FileInfoService.downloadById(dbKey, id, baos); return new ResponseEntity(baos.toByteArray(), headers, HttpStatus.CREATED); } catch (Exception e) { e.printStackTrace(); return null; } finally { } }
function downFileDeal(pk,dbKey) { var url = process.env.VUE_APP_BASE_API +apiUrl.getFile +"/" + dbKey+"/"+pk; commonConsole(url, "url"); let a = document.createElement('a') a.href =url a.click(); }
package com.haday.springbootplus.supermarketSys.fileUpload.controller; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.nio.charset.StandardCharsets; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import com.alibaba.fastjson.JSON; import com.haday.springbootplus.common.vo.Paging; import com.haday.springbootplus.manage.service.ManageServ; import com.haday.springbootplus.manage.service.impl.LoadDataServiceImpl; import com.haday.springbootplus.supermarketSys.attach.service.FileInfoService; import com.haday.springbootplus.supermarketSys.fileUpload.param.DeleteFileParam; import com.haday.springbootplus.supermarketSys.fileUpload.param.FileUploadParam; import com.haday.springbootplus.supermarketSys.fileUpload.param.GetFileListParam; import com.haday.springbootplus.supermarketSys.fileUpload.param.GetFilesParam; import com.haday.springbootplus.util.BaseScanSqlCommand; import com.haday.springbootplus.util.ExceptionUtils; import com.haday.springbootplus.util.FileUtils; import com.haday.springbootplus.util.ListUtils; import com.haday.springbootplus.util.LogUtils; import com.haday.springbootplus.util.ObjectValidityUtils; import com.haday.springbootplus.util.ResultUtils; import com.haday.springbootplus.util.StringUtils; import com.haday.springbootplus.util.UUIDUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.StrUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; @Slf4j @RestController @Api("附件管理") @RequestMapping("/FileController") public class FileController { // public static final String DBKEY = "1"; @Autowired FileInfoService FileInfoService; // // @Autowired // AttachInfoMapper attachInfoMapper; // @Autowired // FTPService ftpService; @Autowired private ManageServ manageServ; @Autowired private LoadDataServiceImpl loadDataServiceImpl; @Autowired protected HttpServletRequest request; // 这里可以获取到request @Autowired protected HttpServletResponse response; // @PostMapping("/fileUploadTest") // @ApiOperation(value = "附件上传", notes = "列表", response = String.class) // @ResponseBody // public Object fileUploadTest(@RequestParam("file") MultipartFile file) throws Exception { // File uploadFile = null; // try { //// 产品目录 // String busField = request.getParameter("busField"); // String busKey = request.getParameter("busKey"); // String busType = request.getParameter("busType"); // String describe = request.getParameter("describe"); // String dbKey = request.getParameter("dbKey"); // String fileName = request.getParameter("fileName"); //// String busField = request.getParameter("busField"); // LogUtils.info(busField, "uuid"); // //// MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request; //// Iterator<String> iter = multiRequest.getFileNames(); // ////// MultipartFile file = file; //// // if (file == null) { // ExceptionUtils.throwRuntimeException("上传文件为空"); // } // if (dbKey == null) { // ExceptionUtils.throwRuntimeException("上传DbKey为空"); // } // if (busField == null) { // ExceptionUtils.throwRuntimeException("上传BusField为空"); // } // if (busType == null) { // ExceptionUtils.throwRuntimeException("上传BusType为空"); // } // if (busKey == null) { // ExceptionUtils.throwRuntimeException("上传BusKey为空"); // } // if (fileName == null) { // ExceptionUtils.throwRuntimeException("上传FileName为空"); // } //// //// // ---------------- // LogUtils.info(file.getOriginalFilename(), "OriginalFilename"); // fileName = fileName + "_" + UUIDUtil.getUUID() + FileUtils.getExtendName(file.getOriginalFilename()); // LogUtils.info(fileName, "fileName"); //// //// // ---------------- //// // uploadFile = new File(fileName); // 创建了一个File对象没有创建文件 // FileUtil.writeFromStream(file.getInputStream(), uploadFile); //// // String storeName = fileName; // String uploadPath = StrUtil.concat(true, busField, StrUtil.SLASH, busKey); // LogUtils.info(uploadPath, "uploadPath"); //// // Map<String, String> map = FileInfoService.saveAttach(dbKey, busField, busKey, busType, storeName, // uploadFile, uploadPath, describe); //// // ---------------- // if (MapUtil.getStr(map, "flag").equalsIgnoreCase("1")) { // Object object = ResultUtils.getSuccessResult(map); // LogUtils.info(object, "FileUpload return object"); // return object; // } else { // Object object = ResultUtils.getResult(false, "附件保存失败,请联系管理员!", JSON.toJSONString(map)); //// Object object = ResultUtils.getResult(false, "附件保存失败,请联系管理员!", JSON.toJSONString("")); //// LogUtils.info(object, "FileUpload return object"); // return object; // } // } catch (Exception e) { // e.printStackTrace(); // return ResultUtils.getErrorResult(e); // } finally { // if (uploadFile != null) { // // 会在本地产生临时文件,用完后需要删除 // if (uploadFile.exists()) { // FileUtil.del(uploadFile); // } // } // } // // } @PostMapping("/fileUpload") @ApiOperation(value = "附件上传", notes = "列表", response = String.class) @ResponseBody public Object fileUpload(@RequestParam("file") MultipartFile file, @RequestParam String busField, @RequestParam String busKey, @RequestParam String busType, @RequestParam String describe, @RequestParam String dbKey, @RequestParam String fileName) throws Exception { File uploadFile = null; try { // 产品目录 String uuid = request.getParameter("busField"); if (file == null) { ExceptionUtils.throwRuntimeException("上传文件为空"); } if (dbKey == null) { ExceptionUtils.throwRuntimeException("上传DbKey为空"); } if (busField == null) { ExceptionUtils.throwRuntimeException("上传BusField为空"); } if (busType == null) { ExceptionUtils.throwRuntimeException("上传BusType为空"); } if (busKey == null) { ExceptionUtils.throwRuntimeException("上传BusKey为空"); } if (fileName == null) { ExceptionUtils.throwRuntimeException("上传FileName为空"); } // ---------------- LogUtils.info(file.getOriginalFilename(), "OriginalFilename"); fileName = fileName + "_" + UUIDUtil.getUUID() + FileUtils.getExtendName(file.getOriginalFilename()); LogUtils.info(fileName, "fileName"); // // // ---------------- // uploadFile = new File(fileName); // 创建了一个File对象没有创建文件 FileUtil.writeFromStream(file.getInputStream(), uploadFile); // String storeName = fileName; String uploadPath = StrUtil.concat(true, busField, StrUtil.SLASH, busKey); LogUtils.info(uploadPath, "uploadPath"); // Map<String, String> map = FileInfoService.saveAttach(dbKey, busField, busKey, busType, storeName, uploadFile, uploadPath, describe); // // ---------------- if (MapUtil.getStr(map, "flag").equalsIgnoreCase("1")) { Object object = ResultUtils.getSuccessResult(map); LogUtils.info(object, "FileUpload return object"); return object; } else { Object object = ResultUtils.getResult(false, "附件保存失败,请联系管理员!", JSON.toJSONString(map)); // Object object = ResultUtils.getResult(false, "附件保存失败,请联系管理员!", JSON.toJSONString("")); // LogUtils.info(object, "FileUpload return object"); return object; } } catch (Exception e) { e.printStackTrace(); return ResultUtils.getErrorResult(e); } finally { if (uploadFile != null) { // 会在本地产生临时文件,用完后需要删除 if (uploadFile.exists()) { FileUtil.del(uploadFile); } } } } @PostMapping("/deleteFile") @ApiOperation(value = "附件删除", notes = "附件删除", response = String.class) @ResponseBody public Object deleteFile(@RequestBody DeleteFileParam param) throws Exception { LogUtils.info(param, "deleteFile"); try { if (param.getDbKey() == null) { ExceptionUtils.throwRuntimeException("上传DbKey为空"); } List<String> IdList = param.getIdList(); ObjectValidityUtils.checkNotEmpty(IdList, "删除文件ID"); String[] ids = new String[IdList.size()]; for (int i = 0; i < IdList.size(); i++) { ids[i] = IdList.get(i); } // // // String[] ids = ListUtils.listToArray(IdList); boolean flag = FileInfoService.delAttachByIds(param.getDbKey(), ids); if (flag) { Object object = ResultUtils.getSuccessResult(""); LogUtils.info(object, "deleteFile return object"); return object; } else { Object object = ResultUtils.getResult(false, "附件删除失败,请联系管理员!", JSON.toJSONString("")); LogUtils.info(object, "deleteFile return object"); return object; } } catch (Exception e) { e.printStackTrace(); return ResultUtils.getErrorResult(e); } finally { } } @PostMapping("/getFileList") @ApiOperation(value = "附件列表", notes = "附件列表", response = String.class) @ResponseBody public Object getFileList(@RequestBody GetFileListParam param) throws Exception { LogUtils.info(param, "getFileList"); try { if (param.getDbKey() == null) { ExceptionUtils.throwRuntimeException("上传DbKey为空"); } String sql = new BaseScanSqlCommand().getSqlText(this, "FileController.xml", "getFileList"); Paging paging = loadDataServiceImpl.getPageData(sql, param.getDbKey(), param.getGetListParam()); Object object = ResultUtils.getSuccessResult(paging); LogUtils.info(object, "getFileList return object"); return object; } catch (Exception e) { e.printStackTrace(); return ResultUtils.getErrorResult(e); } finally { } } // @GetMapping("/getFile/{dbKey}/{id}") // @ApiOperation(value = "附件下载", notes = "附件下载", response = String.class) // @ResponseBody // public ResponseEntity<byte[]> getFile( // @ApiParam(name = "dbKey", value = "dbKey", required = true) @PathVariable String dbKey, // @ApiParam(name = "id", value = "附件id", required = true) @PathVariable String id) throws Exception { // LogUtils.info(id, "getFile"); // try { // if (dbKey == null || dbKey.equals("") || dbKey.length() > 2) { // ExceptionUtils.throwRuntimeException("DbKey不合规则"); // } // // if (id == null || id.equals("")) { // ExceptionUtils.throwRuntimeException("文件id不合规则"); // } // // String sql = new BaseScanSqlCommand().getSqlText(this, "FileController.xml", "getFile"); // sql = sql.replaceAll("##id##", id); // // List<Map<String, Object>> mapList = manageServ.getCommonServ(dbKey).getListMapBySQL(sql); // // if (mapList == null || mapList.size() == 0) { // return null; // } // // String name = StringUtils.toNotNullString(mapList.get(0).get("file_name")); // // HttpHeaders headers = new HttpHeaders(); // String fileName = new String(name.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1); // headers.setContentDispositionFormData("fileName", fileName); // headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); // ByteArrayOutputStream baos = new ByteArrayOutputStream(); // FileInfoService.downloadById(dbKey, id, baos); // // return new ResponseEntity(baos.toByteArray(), headers, HttpStatus.CREATED); // } catch (Exception e) { // e.printStackTrace(); // return null; // } finally { // // } // } @GetMapping("/getFile/{dbKey}/{id}") @ApiOperation(value = "附件下载", notes = "附件下载", response = String.class) @ResponseBody public void getFile(@ApiParam(name = "dbKey", value = "dbKey", required = true) @PathVariable String dbKey, @ApiParam(name = "id", value = "附件id", required = true) @PathVariable String id) throws Exception { LogUtils.info(id, "getFile"); try { if (dbKey == null || dbKey.equals("") || dbKey.length() > 2) { ExceptionUtils.throwRuntimeException("DbKey不合规则"); } if (id == null || id.equals("")) { ExceptionUtils.throwRuntimeException("文件id不合规则"); } String sql = new BaseScanSqlCommand().getSqlText(this, "FileController.xml", "getFile"); sql = sql.replaceAll("##id##", id); List<Map<String, Object>> mapList = manageServ.getCommonServ(dbKey).getListMapBySQL(sql); if (mapList == null || mapList.size() == 0) { ExceptionUtils.throwRuntimeException("id == " + id + ",的文件不存在"); // response.sendError(500, "id == " + id + ",的文件不存在"); // return; } String name = StringUtils.toNotNullString(mapList.get(0).get("file_name")); String fileOutName = new String(name.getBytes("UTF-8"), "ISO8859-1"); response.setHeader("Content-disposition", "attachment;filename=" + fileOutName);// 设置头部信息 FileInfoService.downloadById(dbKey, id, response.getOutputStream()); response.getOutputStream().flush(); } catch (Exception e) { e.printStackTrace(); response.setHeader("downFileErrorMsg", ExceptionUtils.getExceptionTenLevel(e));// 设置头部信息 response.sendError(200, ""); } finally { } } @PostMapping("/getFiles") @ApiOperation(value = "附件下载", notes = "附件下载", response = String.class) @ResponseBody public void getFiles(@RequestBody GetFilesParam param) throws Exception { LogUtils.info(param, "param"); ZipOutputStream zipOutputStream = null; File zipFile = null; BufferedInputStream bis = null; BufferedOutputStream out = null; FileInputStream in = null; try { if (param.getDbKey() == null) { ExceptionUtils.throwRuntimeException("DbKey为空"); // response.sendError(500, "DbKey为空"); // return; } List<String> IdList = param.getIdList(); if (IdList == null || IdList.size() == 0) { ExceptionUtils.throwRuntimeException("文件ID列表为空"); // response.sendError(500, "文件ID列表为空"); // return; } if (IdList.size() >30) { ExceptionUtils.throwRuntimeException("文件个数大于30个"); // response.sendError(500, "文件ID列表为空"); // return; } ObjectValidityUtils.checkNotEmpty(IdList, "文件ID列表为空"); String[] ids = new String[IdList.size()]; for(int i= 0 ;i<IdList.size();i++) { ids[i] = IdList.get(i); } // String[] ids = ListUtils.listToArray(IdList); // ============= String uuid = StringUtils.getUUID(); String zipFileName = uuid + ".zip"; String path = request.getSession().getServletContext().getRealPath("/"); LogUtils.info(path, "path"); // String zipPath = path + "userfiles/uploadFile/" + zipFileName;// 避免重复下载时读取旧文件 String zipPath = path + zipFileName;// 避免重复下载时读取旧文件 LogUtils.info(zipPath, "zipPath"); // ---------- zipFile = new File(zipPath); // zipOutputStream = new ZipOutputStream(new FileOutputStream(zipFile)); for (String pk : ids) { String sql = new BaseScanSqlCommand().getSqlText(this, "FileController.xml", "getFile"); sql = sql.replaceAll("##id##", pk); List<Map<String, Object>> mapList = manageServ.getCommonServ(param.getDbKey()).getListMapBySQL(sql); if (mapList == null || mapList.size() == 0) { throw new RuntimeException(pk + "的数据信息不存在"); } String DownAttachFileName = StringUtils.toNotNullString(mapList.get(0).get("file_name")); ByteArrayOutputStream outStream = new ByteArrayOutputStream(); FileInfoService.downloadById(param.getDbKey(), pk, outStream); // ---------- ZipEntry entry = new ZipEntry(DownAttachFileName); zipOutputStream.putNextEntry(entry); zipOutputStream.write(outStream.toByteArray(), 0, outStream.toByteArray().length); zipOutputStream.closeEntry(); } zipOutputStream.close();// 记得关闭资源 in = new FileInputStream(new File(zipPath)); bis = new BufferedInputStream(in); out = new BufferedOutputStream(response.getOutputStream()); // ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024 * 128]; int n = -1; while ((n = bis.read(buffer)) != -1) { out.write(buffer, 0, n); } out.flush(); } catch (Exception e) { e.printStackTrace(); // if (zipOutputStream != null) { // zipOutputStream.close(); // } if (zipFile != null) { boolean flag = zipFile.delete(); LogUtils.info(flag, "zipFile delete flag"); if (flag) { LogUtils.info("文件已删除(异常)", ""); } else { LogUtils.info("文件未删除(异常)", ""); } } // e.printStackTrace(); response.setHeader("downFileErrorMsg", ExceptionUtils.getExceptionTenLevel(e));// 设置头部信息 response.sendError(200, ""); } finally { if (bis != null) { bis.close(); } if (in != null) { in.close(); } if (out != null) { out.close(); } if (zipOutputStream != null) { zipOutputStream.close(); } boolean flag = zipFile.delete(); LogUtils.info(flag, "zipFile delete flag"); if (flag) { LogUtils.info("文件已删除", ""); } else { LogUtils.info("文件未删除", ""); } } } }
发表评论
-
log4j2应用
2020-07-23 14:16 363https://blog.csdn.net/giventian ... -
文件上传下载
2020-07-06 13:16 4211.文件ID,名字(源,目标),大小,路径(/aa/bb/s. ... -
Spring MVC Controller 接收ajax的数组参数说明
2018-05-12 10:09 925https://blog.csdn.net/u01252787 ... -
Spring MVC web.xml文件分析说明
2016-11-07 18:42 539Spring MVC web.xml文件分析说明 < ... -
Spring MVC工作流程
2016-11-07 17:04 452Spring MVC工作流程 1.用户向服务器发送请求,请 ... -
Spring AOP(面向方面编程)
2016-09-30 09:22 594Spring AOP(面向方面编程) 动态代理实现思路: 1 ... -
Spring 监听器
2016-09-29 09:55 702Spring 监听器 1.监听器是一个专门用于对其他对象身 ... -
Springmvc中在controller注入request会有线程安全问题吗
2016-09-29 00:24 2252Springmvc中在controller注入 ... -
Servlet的多线程和线程安全
2016-09-29 00:13 1335Servlet的多线程和线程安全 Servlet的生命周期 ... -
Spring filter的用法
2016-09-28 18:58 2180Spring filter的用法 1.Filter技术是se ... -
spring properties文件相关
2016-09-27 19:53 463spring properties文件相关 1.prope ... -
Spring注解之@autowired和@resource的区别
2016-09-19 14:54 947Spring注解之@autowired和@resource的区 ... -
Spring IOC实现原理基础
2016-09-18 18:09 454Spring IOC实现原理基础 Spring IOC实现 ... -
Spring自定义注解
2016-09-18 18:01 589Spring自定义注解 @Target(ElementTy ... -
Spring注解
2016-09-18 17:27 388Spring注解 Spring注解配置 1.注解本身做不了 ... -
Spring读取properties文件的处理
2016-09-18 16:46 685Spring读取properties文件的处理 prope ... -
Spring Bean注入方式
2016-09-18 16:26 408Spring Bean注入方式 一、构造器注入 1.构造器 ... -
Spring Multipart工作原理(文件上传到服务器)
2016-08-31 19:18 10357Multipart工作原理 按照Multipart规定的格 ...
相关推荐
本书共计10章,分别介绍了快速搭建Spring Web应用、精通MVC结构、URL映射、文件上传与错误处理、创建Restful应用、保护应用、单元测试与验收测试、优化请求、将Web应用部署到云等内容,循序渐进地讲解了Spring MVC4...
这个压缩包文件"Spring MVC 文件上传下载 后端 - Java.zip"包含的文档可能详细阐述了如何在Java后端实现这些功能。以下是关于Spring MVC中文件上传和下载的关键知识点: 1. **Spring MVC 框架**:Spring MVC是...
而`spring-framework-2.5.6-with-docs.zip`可能包含了Spring 2.5.6的源码和文档,帮助开发者了解Spring MVC的内部实现和最佳实践。 总之,这个压缩包提供了开发基于Spring MVC和Hibernate的Java Web应用所需要的...
Spring MVC是Spring框架的一个核心模块,专为构建Web应用程序提供模型-视图-控制器(MVC)架构。在Spring MVC 4.0版本中,它引入了许多改进和新特性,以提升开发效率和应用程序的性能。 1. **依赖注入**:Spring ...
- **Servlet 3.0 下的 MultipartResolver**:对于 Servlet 3.0 及以上版本,Spring MVC 提供了内置的文件上传支持。 - **处理表单中的文件上传**:通过控制器方法来接收和处理上传的文件。 #### 异常处理 ...
这个官方中文文档详细地介绍了如何使用 Spring MVC 来开发高效、可维护的 MVC(Model-View-Controller)架构的应用。Spring MVC 提供了丰富的功能,包括请求处理、视图解析、数据绑定、异常处理等,旨在简化 Web ...
Spring MVC提供了方便的文件上传和下载功能,开发者可以通过简单的API来实现复杂的文件操作。 **6. 异常处理** 通过自定义异常处理器,Spring MVC允许优雅地处理运行时异常,提供了统一的错误页面和异常信息。 **7...
Spring MVC 是一个基于Java的轻量级Web应用框架,它是Spring框架的重要组成部分,主要...在提供的文档"spring MVC .docx"中,应该包含了关于这些知识点的详细解释和示例代码,帮助读者更好地理解和应用Spring MVC框架。
在本压缩包中包含了一系列与Spring MVC相关的jar文件,这些文件是构建和运行Spring MVC项目所必需的依赖。 首先,`hibernate3.jar` 是Hibernate ORM框架的库,它允许开发者将Java对象映射到关系数据库,提供了数据...
Spring MVC 是一个基于Java的轻量级Web应用框架,它为构建模型-视图-控制器(Model-View-Controller)架构的应用程序提供了强有力的支持。这个简易的Spring MVC demo包含了一系列关键知识点,对于初学者来说是很好的...
在 Spring MVC 中, jsp 文件中尽量不要有 Java 代码, 只有 HTML 代码和"迭代(forEach)"与"判断(if)"两个jstl标签. jsp 文件只作为渲染(或称为视图 View)模板使用. 好了, 我们开始吧. 首先我们需要一个放在 WEB-INF...
6. **Apache Commons**:Spring MVC 开发中可能会用到 Apache Commons 的一些工具库,例如 `commons-logging.jar` 用于日志记录,`commons-fileupload.jar` 用于文件上传,`commons-lang3.jar` 提供了一些实用的 ...
配置Spring MVC通常涉及web.xml文件中的DispatcherServlet配置,以及Spring配置文件中定义的Controller、ViewResolver和其他组件。Spring Boot简化了这一过程,通过自动配置和@SpringBootApplication注解可以快速...
Spring MVC简单易用,可以快速提高开发效率,且性能优秀,社区活跃,文档丰富。由于支持注解配置,使得框架更加易用。相较于Struts2,Spring MVC避免了一些可能导致性能下降的特性,如值栈、OGNL表达式等。 二、...
这篇文档详细地介绍了Spring MVC的功能、工作原理以及如何将其有效地应用于实际项目中。Spring MVC的设计目标是提供一种简洁、可测试且灵活的方式来处理HTTP请求,并将这些请求映射到业务逻辑上,然后将结果呈现给...
通过下载提供的Spring MVC依赖包,你可以快速开始构建自己的Spring MVC项目,享受到Spring框架带来的强大功能和灵活性。记得正确配置项目结构,以及在pom.xml或build.gradle文件中引入所需的依赖,确保项目的顺利...
- 在Spring MVC配置文件中声明处理器映射器、视图解析器、以及自定义的控制器等。 4. **创建简单示例** 在这个"Spring MVC 简单Demo"中,我们可能有一个名为`SummerWeb`的目录,其中包含以下文件: - `web.xml`...
总的来说,实现Spring MVC文件上传的进度条功能需要前端和后端的紧密配合。前端负责用户交互和进度信息的显示,后端则需处理分块上传、进度跟踪和异步响应。通过这样的方式,我们可以在不阻塞用户界面的情况下,提供...