精华内容
下载资源
问答
  • Java实现文件下载

    万次阅读 2017-10-25 12:01:22
    Java实现文件下载

    一、前台通过a标签打开接口,传入文件id

    <a href="/cdc/announcement/downloadFile/1">下载</a>

    二、后台接收id,查找对应文件,进行下载

        @RequestMapping(value = "downloadFile/{id}", method = RequestMethod.GET)
        @PreAuthorize("hasAuthority('view')")
        @ResponseBody
        public void downloadFile(HttpServletRequest req, HttpServletResponse resp, @PathVariable("id") Long id) {
            AnnouncementAnnex announcementAnnex = announcementAnnexService.selectById(id);
            //真实文件名
            String name = announcementAnnex.getAnnexUrl();
            String downloadName=announcementAnnex.getAnnexName();
    //        进行转码后的文件名,用来下载之后的文件名
            PublicController.download(resp,name,downloadName);
        }

    其中download方法

     /**
         * @param resp
         * @param name         文件真实名字
         * @param downloadName 文件下载时名字
         */
        public static void download(HttpServletResponse resp, String name, String downloadName) {
            String fileName = null;
            try {
                fileName = new String(downloadName.getBytes("GBK"), "ISO-8859-1");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            ///home/tomcat/apache-tomcat-9.0.1/files
            String realPath = "D:" + File.separator + "apache-tomcat-8.5.15" + File.separator + "files";
    //        String realPath=File.separator+"home"+File.separator+"tomcat"+File.separator+"apache-tomcat-9.0.1"+File.separator+"files";
            String path = realPath + File.separator + name;
            File file = new File(path);
            resp.reset();
            resp.setContentType("application/octet-stream");
            resp.setCharacterEncoding("utf-8");
            resp.setContentLength((int) file.length());
            resp.setHeader("Content-Disposition", "attachment;filename=" + fileName);
            byte[] buff = new byte[1024];
            BufferedInputStream bis = null;
            OutputStream os = null;
            try {
                os = resp.getOutputStream();
                bis = new BufferedInputStream(new FileInputStream(file));
                int i = 0;
                while ((i = bis.read(buff)) != -1) {
                    os.write(buff, 0, i);
                    os.flush();
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    fileName是文件下载之后的名字,filePath是文件所在文件夹地址,path是文件地址,注意设置的响应类型和编码方式

    其中File.separator为路径分隔符,他能自动识别是哪个操作系统而使用不同的路径分隔符(windows是‘\’,linux是‘/’)。

    展开全文
  • java实现文件下载

    2020-12-02 08:51:29
    java实现文件下载 下载原理 1.需要通过HttpServletResponse.setContentType方法设置Content-Type头字段的值,为浏览器无法使用某种方式或激活某个程序来处理的MIME类型,例如,"application/octet-stream"或...

    java实现文件下载

    下载原理

    1.需要通过HttpServletResponse.setContentType方法设置Content-Type头字段的值,为浏览器无法使用某种方式或激活某个程序来处理的MIME类型,例如,"application/octet-stream"或"application/x-msdownload"等.

    2.需要通过HttpServletResponse.setHeader方法设置Content-Disposition头的值为"attachment;filename=文件名".

    3.读取下载文件,调用HttpServletResponse.getOutputStream方法返回的ServletOutputStream对象来向客户端写入附件文件内容.

    /**
         * 下载文件
         * @param fileId 文件ID
         * @param session
         * @param request
         * @param response
         * @return 成功下载文件,失败返回0
         * @throws IOException
         */
        @RequestMapping("/download.do")
        public int downloadFile(Integer fileId, HttpSession session ,HttpServletRequest request, HttpServletResponse response) throws IOException {
            int keyd = -1;
            
            // 判断用户是否有权限下载这个文件
            if(session.getAttribute("keyd") != null){
                kid = (int) session.getAttribute("keyd");
                Advertisement advertisement = advanceService.selectByPrimaryKey(fileId);
    
    
                //根据文件id在数据库中获取文件名
                String advertis = advertisement.getContent();
                int advertisKeyd =advertisement.getkId();
    
                
                // 如果用户的KID和文件的KID不同,则说明用户与文件不是一个公司的,那么禁止下载
                if(advertisKeyd != keyd){
                    return 0;
                }
    
    
                //文件所在目录路径
                String filePath = UPLOADFILEBASEPATH + advertis;
    
                System.out.println("文件路径:" + filePath);
    
                //得到该文件
                File file = new File(filePath);
                if(!file.exists()){
                    System.out.println("Have no such file!");
                    return 0;//文件不存在就退出方法
                }
    
                FileInputStream fileInputStream = new FileInputStream(file);
                //设置Http响应头告诉浏览器下载这个附件,下载的文件名也是在这里设置的
                response.setHeader("Content-Disposition", "attachment;Filename=" + URLEncoder.encode(advertis, "UTF-8"));
                OutputStream outputStream = response.getOutputStream();
                byte[] bytes = new byte[2048];
                int len = 0;
                while ((len = fileInputStream.read(bytes))>0){
                    outputStream.write(bytes,0,len);
                }
                fileInputStream.close();
                outputStream.close();
            }
    
            return 0;
        }
    
    
    
    展开全文
  • Java 实现文件下载

    2016-12-27 11:53:15
    Java实现文件下载,需要实现2个功能点: (1) 设置输出流格式 resp.setContentType("application/x-download");  保证 浏览器能识别输出流为下载文件。 (2)设置下载文件名 response.setHeader(...

    Java实现文件下载,需要实现2个功能点:

    (1)      设置输出流格式

    resp.setContentType("application/x-download");   

    保证 浏览器能识别输出流为下载文件。

    (2)设置下载文件名

    response.setHeader("content-disposition", "attachment;filename="+ URLEncoder.encode("下载文件.mp4","utf-8"));

    设置下载文件的文件名。


    展开全文
  • JAVA实现文件下载

    2012-12-24 10:58:40
    JAVA代码,通过文件名及文件路径实现本地文件下载
  • java 实现文件下载

    2020-07-09 15:50:31
    public HttpServletResponse download(String path, HttpServletResponse ... // path是指欲下载文件的路径。 File file = new File(path); // 取得文件名。 String filename = file.getName(); // 取得文件的.
    public HttpServletResponse download(String path, HttpServletResponse response) {
            try {
                // path是指欲下载的文件的路径。
                File file = new File(path);
                // 取得文件名。
                String filename = file.getName();
                // 取得文件的后缀名。
                String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();
    
                // 以流的形式下载文件。
                InputStream fis = new BufferedInputStream(new FileInputStream(path));
                byte[] buffer = new byte[fis.available()];
                fis.read(buffer);
                fis.close();
                // 清空response
                response.reset();
                // 设置response的Header
                response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes()));
                response.addHeader("Content-Length", "" + file.length());
                OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
                response.setContentType("application/octet-stream");
                toClient.write(buffer);
                toClient.flush();
                toClient.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
            return response;
        }
    
        public void downloadLocal(HttpServletResponse response) throws FileNotFoundException {
            // 下载本地文件
            String fileName = "Operator.doc".toString(); // 文件的默认保存名
            // 读到流中
            InputStream inStream = new FileInputStream("c:/Operator.doc");// 文件的存放路径
            // 设置输出的格式
            response.reset();
            response.setContentType("bin");
            response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
            // 循环取出流中的数据
            byte[] b = new byte[100];
            int len;
            try {
                while ((len = inStream.read(b)) > 0)
                    response.getOutputStream().write(b, 0, len);
                inStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        public void downloadNet(HttpServletResponse response) throws MalformedURLException {
            // 下载网络文件
            int bytesum = 0;
            int byteread = 0;
    
            URL url = new URL("windine.blogdriver.com/logo.gif");
    
            try {
                URLConnection conn = url.openConnection();
                InputStream inStream = conn.getInputStream();
                FileOutputStream fs = new FileOutputStream("c:/abc.gif");
    
                byte[] buffer = new byte[1204];
                int length;
                while ((byteread = inStream.read(buffer)) != -1) {
                    bytesum += byteread;
                    System.out.println(bytesum);
                    fs.write(buffer, 0, byteread);
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

     

    展开全文
  • java实现文件下载

    千次阅读 2009-03-05 10:05:00
    /** 该类使用方法: 在使用struts框架(或其他框架)时,如果从action转到该servlet,有一点要注意。就是在使action之前如果是用了filter,并且在filter调用...出错信息大致如下: java.lang.IllegalStateException
  • Java实现文件下载功能

    2012-02-25 18:03:13
    Java实现文件下载功能,以WORD文档方式展现给用户看。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,409
精华内容 4,563
关键字:

java实现文件下载

java 订阅