java web上传文件和下载文件代码片段分享

 更新时间:2017年01月23日 10:04:54   作者:夏诗鸢  
这篇文章主要为大家详细介绍了java web上传文件和下载文件代码片段,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了java web上传文件和下载文件的具体代码,供大家参考,具体内容如下

 /**
  * Purpose:上传文档
  * 
  * @param req
  * @param fileTitle
  * @param fileType
  * @param fileDesc
  * @return
  */
 @RequestMapping("upload")
 public ModelAndView upload(HttpServletRequest req, String fileType, String fileDesc, String share) {
  UserAllInfo userAll = (UserAllInfo) req.getSession().getAttribute("userAll");
  ModelAndView mav = new ModelAndView();
  // 获取文件的大小
  String fileSize = "";
  int length = req.getContentLength();
  //转换成KB
  double len1 = (double) (Math.round((length / 1024) * 100)) / 100;
  //转换成MB
  double len2 = (double) (Math.round((len1 / 1024) * 100)) / 100;
  if (len2 > 1) {
   fileSize = String.valueOf(len2) + "MB";
  } else {
   fileSize = String.valueOf(len1) + "KB";
  }
  //将请求转换成处理文件的请求
  MultipartRequest mreq = (MultipartRequest) req;
  //文件上传专用类
  MultipartFile mfile = mreq.getFile("uploadFile");

  // 得到上下文路径
  String root = req.getSession().getServletContext().getRealPath("/");
  File dir = new File(root);
  // 获取文件名和文件的mime类型
  String str = mfile.getOriginalFilename();
  String[] st = str.split("\\.");

  File savedFile = null;
  try {
   //在指定目录中创建一个新的空文件,文件名称加前缀"upload_"
   savedFile = File.createTempFile("upload_", mfile.getOriginalFilename(), dir);
   //将缓冲区的内容复制到新创建的文件中
   FileCopyUtils.copy(mfile.getInputStream(), new FileOutputStream(savedFile));
  } catch (Exception e) {
   e.printStackTrace();
  }
  String path = savedFile.getPath();

  // 将文件的信息封装在对象中
  FileInfo file = new FileInfo();
  if (userAll != null) {
   file.setUploadPersonId(userAll.getUser().getUserId());
  } else {
   mav.setViewName("login");
   return mav;
  }
  file.setFileName(st[0]);
  file.setFilePath(path);
  Date date = new Date();
  file.setUploadDate(date);
  file.setFileSize(fileSize);
  file.setFileType(fileType);
  file.setFileForm(st[1]);
  if ("superman".equals(userAll.getUser().getUserNumber())) {
   file.setFileShare("Y");
   file.setCheckFlag("Y");
  } else {
   file.setFileShare(share);
   file.setCheckFlag("N");
  }
  file.setDeleteFlag("N");
  file.setDownloadTimes(0);
  // 保存文件的信息
  boolean bool = fileSer.saveFile(file);
  String userNumber = userAll.getUser().getUserNumber();
  //设置跳转界面
  mav.setViewName("jsp/person/upload");
  logSer.saveLog("用户\"" + userNumber + "\"上传文件\"" + file.getFileName() + "\"");
  mav.getModel().put("bool", bool);
  return mav;
 }

 /**
  * Purpose:下载文档
  * 
  * @param fileId 文件id
  * @return
  */
 @RequestMapping("download")
 public void download(Integer fileId, HttpServletResponse resp) {
  FileInfo file = new FileInfo();
  //通过文件id获取文件的基本信息
  file = fileSer.getFileById(fileId);

  // 根据文件后缀名设置文件的mime类型
  String mime = "application/";
  switch (file.getFileForm()) {
  case "doc":
   mime = mime + "msword";
   break;
  case "docx":
   mime = mime + "msword";
   break;
  case "pdf":
   mime = mime + "pdf";
   break;
  case "xls":
   mime = mime + "vnd.ms-excel";
  case "ppt":
   mime = mime + "vnd.ms-powerpoint";
   break;
  case "txt":
   mime = "text/plain";
   break;
  default:
   break;
  }
  resp.setContentType(mime);
  String fileName = file.getFileName();
  String name = "";
  try {
   // 将文件名使用utf-8编码格式编码,使其中的中文字符可以正常显示
   name = URLEncoder.encode(fileName, "utf-8");
  } catch (UnsupportedEncodingException e1) {
   e1.printStackTrace();
  }

  // 弹框选择保存路径
  resp.setHeader("content-disposition", "attachment;filename=" + name + "." + file.getFileForm()
    + ";filename*=utf-8''" + name + "." + file.getFileForm());

  String filePath = file.getFilePath();
  InputStream is = null;
  OutputStream os = null;
  try {
   is = new BufferedInputStream(new FileInputStream(filePath));
   os = new BufferedOutputStream(resp.getOutputStream());
   byte[] buff = new byte[1024];
   @SuppressWarnings("unused")
   int count;
   while ((count = is.read(buff)) != -1) {
    os.write(buff);
   }
   //修改下载次数
   fileSer.update(fileId);
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   //最后,要记得关闭输入流和输出流
   if (is != null) {
    try {
     is.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
   if (os != null) {
    try {
     os.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • mybatis模糊查询like语句该如何写

    mybatis模糊查询like语句该如何写

    MyBatis模糊查询通常使用LIKE关键字,结合concat函数拼接通配符%实现,在MyBatis配置文件中,通过#{keyword}传递参数,生成带有通配符的查询语句,MyBatis-Plus中,通过LambdaQueryWrapper类和like方法构建模糊查询条件,简化查询操作
    2024-09-09
  • Log4j关闭Spring和Hibernate日志打印方式

    Log4j关闭Spring和Hibernate日志打印方式

    这篇文章主要介绍了Log4j关闭Spring和Hibernate日志打印方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Spring Cloud @EnableFeignClients注解的属性字段basePacka详解

    Spring Cloud @EnableFeignClients注解的属性字段basePacka详解

    这篇文章主要介绍了Spring Cloud @EnableFeignClients注解的属性字段basePacka详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 关于Java项目读取resources资源文件路径的那点事

    关于Java项目读取resources资源文件路径的那点事

    这篇文章主要介绍了关于Java项目读取resources资源文件路径的那点事,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Java注解(annotation)简述

    Java注解(annotation)简述

    这篇文章主要介绍了使用java的注解(用在java类的方法上的注解)方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-08-08
  • SpringBoot使用@Cacheable注解实现缓存功能流程详解

    SpringBoot使用@Cacheable注解实现缓存功能流程详解

    最近一直再学Spring Boot,在学习的过程中也有过很多疑问。为了解答自己的疑惑,也在网上查了一些资料,以下是对@Cacheable注解的一些理解
    2023-01-01
  • mybatis之如何获取表中某一列的最大值

    mybatis之如何获取表中某一列的最大值

    这篇文章主要介绍了mybatis之如何获取表中某一列的最大值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • 以Java代码为例讲解设计模式中的简单工厂模式

    以Java代码为例讲解设计模式中的简单工厂模式

    简单来说,工厂模式就是按照需求来返回一个类型的对象,使用工厂模式的意义就是,如果对象的实例化与代码依赖太大的话,不方便进行扩展和维护,使用工厂的目的就是使对象的实例化与主程序代码就行解耦.来具体看一下:
    2016-05-05
  • Springboot开发之利用Docker和Kubernetes部署微服务

    Springboot开发之利用Docker和Kubernetes部署微服务

    这篇文章主要介绍了如何将Spring Boot开发的微服务通过Docker容器化,并使用Kubernetes进行部署和管理,帮助读者掌握现代云原生应用的完整开发部署流程,有需要的可以了解下
    2025-03-03
  • 消息队列 RabbitMQ 与 Spring 整合使用的实例代码

    消息队列 RabbitMQ 与 Spring 整合使用的实例代码

    本篇文章主要介绍了消息队列 RabbitMQ 与 Spring 整合使用的实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08

最新评论