1、第一步:思路。1、首先我们要理解上传文件的步骤,上传文件时为例避免文件重名,一般都会生成一个UUID或者时间戳作为文件名,然后将文件真实的名字和存储的名字放在数据库表中的一条记录中。2、下载和在前台展示的到时候查询数据库的记录。2.1:展示前台的是原始名称2.2:下载时根据UUID名字进行查找。3、借助于springMVC实现下载上传。
2、第二步:下载代码实现。代码主要主要包括1、前台页面跳转,并查询数据库原始文件名展示2、下载,根据数据库id查询文件存放路径下载@Controller@RequestMapping("/downloadImg")public class DownloadController { @RequestMapping("toIndex") public ModelAndView toIndex(HttpServletRequest request, HttpServletResponse response){ //想数据库请求查询得到原始文件名展示 ModelAndView mv = new ModelAndView("index"); mv.addObject("name","火影"); return mv; } @ResponseBody @RequestMapping("/download") public void testUrl(HttpServletRequest request) throws UnsupportedEncodingException { //获取请求的url StringBuffer url = request.getRequestURL(); //获取url后面的参数 String urlParame = request.getQueryString();; System.out.println("url:"+ url); System.out.println("urlParame:"+ urlParame); //根据参数名称获取参数 String name = request.getParameter("name"); System.out.println("name:"+ new String(name.getBytes("ISO-8859-1"),"utf-8")); } public ResponseEntity<byte[]> download(HttpServletRequest request) throws IOException { //读取文件 File file = new File("D:/img/火影2.jpg"); byte[] body = null; InputStream is = new FileInputStream(file); body = new byte[is.available()]; is.read(body); HttpHeaders headers = new HttpHeaders(); //设置文件头 headers.add("Content-Disposition", "attchement;filename=" + new String( "火影2.jpg".getBytes("gb2312"), "ISO8859-1" )); HttpStatus statusCode = HttpStatus.OK; ResponseEntity<byte[]> entity = new ResponseEntity<byte[]>(body, headers, statusCode); return entity; }}
3、第三步:测试。1、打开跳转页面。2、下载请求,如下所示下载成功