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

作者:夏诗鸢 时间:2023-10-04 19:50:50 

本文实例为大家分享了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();
   }
  }
 }
}
标签:java,web,上传文件,下载文件
0
投稿

猜你喜欢

  • Android framework ATMS启动流程

    2022-11-21 10:08:07
  • C#中SQL参数传入空值报错解决方案

    2023-12-14 14:28:59
  • 基于SSM实现学生管理系统

    2023-11-24 18:17:39
  • Android中GridView布局实现整体居中方法示例

    2023-12-23 13:21:18
  • Java框架MyBatis接口编程过程解析

    2022-09-18 07:47:04
  • Jsoup解析HTML实例及文档方法详解

    2023-12-11 22:04:48
  • Spring定时任务无故停止又不报错的解决

    2021-06-06 08:41:27
  • WPF开发之实现一种三轴机械手控件

    2021-10-29 19:16:29
  • 【MyBatis源码全面解析】MyBatis一二级缓存介绍

    2023-02-25 23:57:12
  • 详解C#中的依赖注入和IoC容器

    2023-03-11 09:05:19
  • java反射遍历实体类属性和类型,并赋值和获取值的简单方法

    2023-07-15 04:37:18
  • C#控制台模拟电梯工作原理

    2021-08-06 02:35:33
  • java中ThreadLocal的基本原理

    2022-03-28 01:13:44
  • jcrop 网页截图工具(插件)开发

    2022-10-21 22:30:19
  • SpringBoot v2.2以上重复读取Request Body内容的解决方案

    2022-06-27 11:00:16
  • c# volatile 关键字的拾遗补漏

    2022-10-20 04:39:09
  • Android自定义控件仿ios下拉回弹效果

    2021-07-17 13:17:06
  • C语言实现扫雷小游戏的示例代码

    2022-05-21 13:05:18
  • 浅谈Android轻量级的数据缓存框架RxCache

    2023-12-22 14:01:30
  • JDBC使用游标实现分页查询的方法

    2021-06-03 19:07:26
  • asp之家 软件编程 m.aspxhome.com