赞
踩
- /**
- * 上传文件信息,文件信息保存到数据库,文件数据保存在\target\img目录下
- * @param myFile 上传的文件
- * @param session
- * @return 完成后重定向到展示页面
- * @throws IOException
- */
- @RequestMapping("upload")
- public String upload(MultipartFile myFile, HttpSession session) throws IOException {
- //获取用户id
- User user = (User) session.getAttribute("user");
- Integer id=user.getId();
- //获取文件的原始名称
- String oldFileName = myFile.getOriginalFilename();
-
- //先获取原来的后缀
- String ext = "."+ FilenameUtils.getExtension(oldFileName);
-
- //生成新的文件名(时间戳+UUID+后缀)
- String newFileName=new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+ UUID.randomUUID().toString().replace("-","")+ ext;
-
- //法1、动态获取当前项目files目录 (realPath绝对路径) 本地可用,部署报错
- // String realPath= ResourceUtils.getURL("classpath:").getPath()+"/static/files";
- //法2、部署后,文件上传到服务器,在jar包外生成一个img文件夹,用来存放文件
- String realPath = System.getProperty("user.dir") + "/img/";
- System.out.println("绝对路径*******"+realPath);
- //根据日期生成目录
- String dateFormat = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
-
- //绝对路径 + 时间戳
- String dateDirPath = realPath + "/" + dateFormat ;
-
- File dateDir = new File(dateDirPath);
-
- //如果文件夹不存在,创建
- if (!dateDir.exists()) {
- dateDir.mkdirs();
- }
- //处理文件上传(将文件数据放入新建的文件夹中)
- myFile.transferTo(new File(dateDir,newFileName));
- //将文件信息放入数据库
- UserFile userFile = new UserFile();
- userFile.setOldFileName(oldFileName).setNewFileName(newFileName).setExt(ext);
- // userFile.setPath("/files/"+dateFormat);
- userFile.setPath("/img/"+dateFormat);
- userFile.setUId(id);
- userFile.setUploadTime(new Date());
- userFileService.saveFile(userFile);
- return "redirect:/file/showAll";
- }
-
- @RequestMapping("deleteFile")
- public String deleteFile(Integer id) throws FileNotFoundException {
- //根据id查询信息
- UserFile userFile = userFileService.findByFileId(id);
- //删除文件本身
- String realPath=System.getProperty("user.dir") + userFile.getPath();
- // String realPath = ResourceUtils.getURL("classpath:").getPath() + "/static" + userFile.getPath();
- File file = new File(realPath, userFile.getNewFileName());
- if (file.exists()) file.delete();//立即删除
- //接着删除数据库中记录
- userFileService.deleteFileById(id);
-
- return "redirect:/file/showAll";
- }
-
- /**
- * 文件下载(一个请求只能对应一个唯一的响应,无返回值)
- */
- @GetMapping("download")
- public void download(String openStyle,Integer id, HttpServletResponse response){
- //获取打开方式(判断是下载还是打开)
- openStyle = openStyle == null ? "attachment" : openStyle;
- FileInputStream is=null;
- ServletOutputStream os=null;
- try {
- //获取文件信息
- UserFile userFile = userFileService.findByFileId(id);
- //根据文件信息中文件名字 和 文件存储路径获取文件输入流(realPath文件下载路径) 部署后报错
- // String realPath = ResourceUtils.getURL("classpath:").getPath() + "/static" + userFile.getPath();
- // String realPath=System.getProperty("user.dir")+"/static" + userFile.getPath();
- // String realPath = System.getProperty("user.dir") + "/img/" + userFile.getPath();
- String realPath=System.getProperty("user.dir") + userFile.getPath();
- System.out.println("realPath********"+realPath);
-
- //获取文件输入流
- is = new FileInputStream(new File(realPath, userFile.getNewFileName()));
- //附件下载会默认打开,拿流之前设置响应头(attachment下载,inline在线打开)
- String OldNameEncode = URLEncoder.encode(userFile.getOldFileName(), "UTF-8");
- response.setHeader("content-disposition",openStyle+";fileName="+OldNameEncode);
- //获取响应输出流
- os = response.getOutputStream();
- //文件拷贝
- IOUtils.copy(is, os);
- }catch (Exception e){
- e.printStackTrace();
- }finally {
- try {
- is.close();
- os.close();
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。