zoukankan      html  css  js  c++  java
  • javaweb项目中的文件上传下载功能的实现

    框架是基于spring+myBatis的。

     

    前台页面的部分代码:

    <form action="${ctx}/file/upLoadFile.do"method="post" enctype="multipart/form-data" id="form"><table><tbody ><tr ><td>上传文件:</td><td style="padding-left: 10px;"><input type="file" name="file" id="fileInput"></td><td style="padding-left: 80px;"><button type="submit" class="btn btn-primary btn-q btn-outline fa fa-upload"
               class="easyui-validatebox" data-options="required:true">上传</button></td></tr><tr><td colspan="2"><span style="color:red">*上传文件格式为xls,xlsx,txt,csv文件!</span>&nbsp;&nbsp;</td>
        </tr>
      </tbody>
    </table></form>

    {
      title : '操作',
      halign : 'center',
      align : 'center',
      width : 80,
      field : 'FILE_PATH',
      formatter: function(value,row,index){
      var path = "${ctx}/file/download.do?filePath=" + value ;
      var button = '<button type="button" class="btn btn-primary btn-q btn-outline fa fa-download" class="easyui-validatebox" 
               data-options="required:true">下载</button>';
              return "<a href='" + path  + "'>" + button +  "</a>";
    }

    上传功能的方法:

    @RequestMapping("/upLoadFile")
        public String upload(@RequestParam(value = "file", required = false) MultipartFile file, ModelMap model, HttpServletRequest request) 
            throws Exception {
              //设置相对路径
            String realPath = request.getSession().getServletContext().getRealPath("/upload");
              //获取文件的格式
            String extention = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);
              //对格式进行筛选
            if(extention.equalsIgnoreCase("xls") || extention.equalsIgnoreCase("xlsx") || extention.equalsIgnoreCase("txt") 
            || extention.equalsIgnoreCase("csv")) {
              //在路径下创建文件夹
            File f = new File(realPath);
                String fileName = file.getOriginalFilename();
                String uploadPath = realPath + File.separator + fileName;
                if(!f.exists()) {
                    f.mkdir();
                }
              //文件的传输
                file.transferTo(new File(uploadPath));
                Upload upload = new Upload();
                upload.setFileName(fileName);
                upload.setFileLength(String.valueOf(file.getSize()));
                upload.setFileOwner(super.getLoginUser(request).getLoginId());
                upload.setFilePath("/upload/" + fileName);
              //将文件的基本信息存到数据库
                fileQueryService.saveFile(upload);
                request.setAttribute("info","文件上传成功!");
            } else {
                request.setAttribute("info","文件类型不正确,请上传格式为xls,xlsx,txt,csv文件!");
            }
            return "page/file/fileInteraction";
        }

     下载功能的方法:

    @RequestMapping("/download")
        public String download(String filePath, HttpServletRequest request,
                               HttpServletResponse response) {
            try {
              //获取文件名
                String fileName = filePath.substring(filePath.lastIndexOf("/")+1);
                System.out.println(filePath);
                response.setCharacterEncoding("utf-8");
                response.setContentType("multipart/form-data");
              //处理下载弹出框名字的编码问题
                response.setHeader("Content-Disposition", "attachment;fileName="
                        + new String( fileName.getBytes("gb2312"), "ISO8859-1" ));
              //获取文件的下载路径
                String path = request.getSession().getServletContext().getRealPath(filePath);
                System.out.println(path);
              //利用输入输出流对文件进行下载
                InputStream inputStream = new FileInputStream(new File(path));
                OutputStream os = response.getOutputStream();
                byte[] b = new byte[2048];
                int length;
                while ((length = inputStream.read(b)) > 0) {
                    os.write(b, 0, length);
                }
                // 这里主要关闭。
                os.close();
                inputStream.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            //  返回值要注意,要不然就出现下面这句错误!
            //java+getOutputStream() has already been called for this response
            return null;
        }

    最终效果:


    下载页面:


    文件的上传和下载完整版demo下载:

    https://dwz.cn/fgXtRtnu 

  • 相关阅读:
    pm2进阶使用
    javascript装饰器模式
    pupeteer初体验
    重构:从Promise到Async/Await
    # electron-vue 尝试做个网易云音乐
    Kafka监控:主要性能指标
    生产环境Rabbitmq集群安装部署与配置
    Java同步块(synchronized block)
    RabbitMQ高可用镜像队列
    kafka-0.9消费者新API
  • 原文地址:https://www.cnblogs.com/xproer/p/10754647.html
Copyright © 2011-2022 走看看