精华内容
参与话题
问答
  • java实现文件下载

    万次阅读 2019-07-07 09:45:31
    原理是使用java.io中的File类打开要下载文件,用输入流将文件读入系统,再将response中的输出流连接到系统,通过输入流和输出流进行文件下载。 在response的响应头中设置下载文件的文件名 /** * 下载文件 * @...

    原理是使用java.io中的File类打开要下载的文件,用输入流将文件读入系统,再将response中的输出流连接到系统,通过输入流和输出流进行文件下载。

    在response的响应头中设置下载文件的文件名

    /**
         * 下载文件
         * @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 kid = -1;
            
            // 判断用户是否有权限下载这个文件
            if(session.getAttribute("kid") != null){
                kid = (int) session.getAttribute("kid");
                Advertisement advertisement = advanceService.selectByPrimaryKey(fileId);
    
    
                //根据文件id在数据库中获取文件名
                String advertis = advertisement.getContent();
                int advertisKid =advertisement.getkId();
    
                
                // 如果用户的KID和文件的KID不同,则说明用户与文件不是一个公司的,那么禁止下载
                if(advertisKid != kid){
                    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;
        }
    
    
    展开全文
  • 文件下载的三种方式

    千次阅读 2018-08-14 12:10:04
    1。 第一种方法是前后端的接口只给了一个API请求: 前端第一种实现方式: <a href="/downloadfilerouter" download>&...&

    1。 第一种方法是前后端的接口只给了一个API请求:

    前端第一种实现方式:

     <a href="/downloadfilerouter" download></a>
     *备注: download属性只支持firefox, chrome,不支持IE*

    前端第二个实现是使用一个div标签,使用click事件,创建一个a标签

    <div name="downloadfile"
    onclick="downloadFileFunction()">DownLoader</div>
    function downloadFileFunction() {
        let a = document.createElement('a');
        a.href = '/downloadfilerouter';
        a.click();
    }  

    后端使用nodejs,我在这里把下载的文件固定了,也可以自己传人一个变量进入,在这里需要导入两个模块

    var fs = require('fs');
    var path = require('path');
    router.get('/downloadfilerouter', function (req, res, next) {
        var filename = 'desktop.ini';
        var filepath = path.join(__dirname, '../uploader/' + filename);
        var stats = fs.statSync(filepath);
        if (stats.isFile()) {
            res.set({
                'Content-Type': 'application/octet-stream',
                'Content-Disposition': 'attachment; filename=' + filename,
                "Content-Length": stats.size
            });
            fs.createReadStream(filepath).pipe(res);
        } else {
            res.end(404);
        }
    });
    **在firefox中,
    'Content-Disposition': 'attachment; filename=' + filename,文件名不能正常显示
    修改为以下代码:
    "content-disposition", "attachment;filename*=UTF-8''"+ filename
    **

    2。第二种是定义的接口不是下载文件的路径,而是通过API可以获得文件的内容,由前端把内容写入到文件中,这种方法是通过获取文件信息,在网页上利用click事件,创建一个文件,然后将文件信息写入到文件中,然后保存。

    <a name="download" (click)="downloadfile()"></a> 
    downloadfile(){  
        this.filecontent = "this is my file content"; 
        this.url = "localhost:8000/home/home/file.txt";
        let a = document.createElement('a');
        a.href = "data:text/json;charset=utf-8,"+      
        this.filecontent;
        a.download = "myfilename";
        a.click();
    }

    3。 第三种方法和第一种类似,只是创建的是一个iframe。

    <a name="download" (click)="downloadfile()"></a>
    downloadfile(){
        this.url = "localhost:8000/home/home/file.txt";
        let elem = document.createElement('iframe');
        elem.src = url;
        elem.style.display = 'none';
        document.body.appendChild(elem);
    }

    前两种方法详见:https://github.com/webPageDev/Demo

    web端最简单的下载文件方式是采用html中a标签形式直接进行下载,只需要将文件的全路径赋值给href,同时给download属性赋予文件名即可。有些浏览器(IE8-11等)则在网页上直接打开,有时候还会是乱码。所以为了彻底解决这个,需要在服务器端想办法进行解决。
    在spring框架下,通过href链接下载时,设置Servlet拦截相应的url,然后进入后台进行相应的输入。 示例代码如下:

    public void fileOutputStream(HttpServletRequest req, HttpServletResponse resp) 
                    throws ServletException, IOException {
                String filepath = req.getRequestURI();
                int index = filepath.indexOf(Global.USERFILES_BASE_URL);
                if(index >= 0) {
                    filepath = filepath.substring(index + Global.USERFILES_BASE_URL.length());
                }
                try {
                    filepath = UriUtils.decode(filepath, "UTF-8");
                } catch (UnsupportedEncodingException e1) {
                    logger.error(String.format("解释文件路径失败,URL地址为%s", filepath), e1);
                }
                File file = new File(Global.getUserfilesBaseDir() + 
                            Global.USERFILES_BASE_URL + filepath);
                try {
                    resp.setContentType("application/x-msdownload; charset=utf-8");  
                    resp.setHeader("Content-Disposition", "attachment;");
                    FileCopyUtils.copy(new FileInputStream(file), resp.getOutputStream());
                    return;
                } catch (FileNotFoundException e) {
                    req.setAttribute("exception", new FileNotFoundException("请求的文件不存在"));
                    req.getRequestDispatcher("/WEB-INF/views/error/404.jsp").forward(req, resp);
                }
            }

    关键代码:resp.setHeader(“Content-Disposition”, “attachment;”);这里指定输出是附件。这样的话,就明确的告诉浏览器这是在下载附件,从而解决了不同浏览器可能会出现直接打开文件甚至乱码问题。
    对于tomcat而言,查看conf/web.xml,寻找所有的mime类型,如果存在你需要下载的文件的话,即不用进行修改,如果不存在的话,需要添加,然后重启服务器,给a标签赋值要下载文件的全路径即可(比如xls的文件就不用修改配置,而rar就需要配置,zip也不需要配置);注意,如果路径中包含中文的话,还需要稍微改动,否则可能会无法下载,需要在Server.xml文件中,在http端口设置处,需要加上编码,如下:

    注意URIEncoding赋值为UTF-8,。因为对于get方式请求过来的编码,若文件路径中存在中文,则可能出现乱码。对于post请求过来的编码,可以用传统的request.setContent**方式进行配置。

    展开全文
  • 下载文件downloadFile

    千次阅读 2015-11-13 16:38:00
    public static void downLoadFile(InputStream inStream, String fileName) { if (StringUtils.isBlank(fileName)) { fileName = UUID.randomUUID().toString().replaceAll("-", ""); } ...
    public static void downLoadFile(InputStream inStream, String fileName)
      {
        if (StringUtils.isBlank(fileName)) {
          fileName = UUID.randomUUID().toString().replaceAll("-", "");
        }
        HttpServletRequest req = getRequest();
        String agent = req.getHeader("User-Agent");
        boolean isMSIE = (agent != null) && (agent.indexOf("MSIE") != -1);
        try
        {
          if (isMSIE) {
            fileName = URLEncoder.encode(fileName, "UTF-8");
            fileName = fileName.replace("+", "%20");
          } else {
            fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
          }
        } catch (UnsupportedEncodingException e) {
          e.printStackTrace();
        }
        HttpServletResponse response = getResponse();
        response.setCharacterEncoding("UTF-8");
        response.setHeader("content-disposition", "attachment;filename=\"" + fileName + "\"");
        response.setContentType("application/octet-stream");
        OutputStream outStream = null;
        try {
          outStream = response.getOutputStream();
          byte[] cache = new byte[1024];
          int length = inStream.read(cache);
          while (length != -1) {
            outStream.write(cache, 0, length);
            length = inStream.read(cache);
          }
        } catch (IOException e) {
          e.printStackTrace();
          try
          {
            outStream.flush();
          } catch (IOException e) {
            e.printStackTrace();
          }
          try {
            outStream.close();
          } catch (IOException e) {
            e.printStackTrace();
          }
          try {
            inStream.close();
          } catch (IOException e) {
            e.printStackTrace();
          }
        }
        finally
        {
          try
          {
            outStream.flush();
          } catch (IOException e) {
            e.printStackTrace();
          }
          try {
            outStream.close();
          } catch (IOException e) {
            e.printStackTrace();
          }
          try {
            inStream.close();
          } catch (IOException e) {
            e.printStackTrace();
          }
        }
      }
    public static HttpServletRequest getRequest()
      {
        ActionContext ac = ActionContext.getContext();
        HttpServletRequest req = null;
        if (ac != null) {
          req = (HttpServletRequest)ac.get("com.opensymphony.xwork2.dispatcher.HttpServletRequest");
        }
    
        return req;
      }
    public static HttpServletResponse getResponse()
      {
        ActionContext ac = ActionContext.getContext();
        HttpServletResponse response = (HttpServletResponse)ac.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse");
        return response;
      }

     

    转载于:https://www.cnblogs.com/sierrajuan/p/4962530.html

    展开全文
  • js实现点击下载文件

    万次阅读 2019-05-15 16:24:22
    实现方法 var link = document.createElement('a');...解释:创建一个a标签,然后设置 download 属性,这个是重点,有这个属性才能下载,然后设置下载的链接。 在网上找了很多的方法,基本就是通过下面...

    实现方法

    var link = document.createElement('a');
    link.setAttribute("download", "");
    link.href = "you file url";
    link.click();

    解释:创建一个a标签,然后设置 download 属性,这个是重点,有这个属性才能下载,然后设置下载的链接。

    在网上找了很多的方法,基本就是通过下面方法打开:

    window.location.href="你的url"; 
    
    window.open("你的url")

    但是文件是 txt 或者 img 的话,那么谷歌浏览器就会直接打开这些文件。

    展开全文
  • FileDownload文件下载

    千次阅读 2018-05-24 21:37:35
    文件下载: 1)步骤: ①.设置contentType响应头:设置响应的类型是什么?通知浏览器是个下载文件 response.setContentType("application/x-msdownload"); ②.设置Content-Disposition响应头:通知浏览器不在有...
  • 文件下载详述

    2018-10-08 15:40:11
    文件下载 目录  1、文件下载就是向客户端响应字节数据!  2、下载的要求:两个头一个流!  3、编写文件下载代码  4、下载的细节 ----------------------------------------------------------------------...
  • 任意文件下载

    千次阅读 2019-09-26 16:24:27
    4.2.4 任意文件下载 1、漏洞描述 目录遍历(任意文件下载)漏洞不同于网站目录浏览,此漏洞不仅仅可遍历系统下web中的文件,而且...
  • 文件下载file

    2015-11-25 20:42:16
    需求:实现一个具有文件下载功能的网页,主要下载压缩包和图片 两种实现方法:  一:通过超链接实现下载 在HTML网页中,通过超链接链接到要下载文件的地址 [html] view plaincopy > html> ...
  • 文件下载方法

    2019-01-17 14:31:45
    记录自己碰到的问题: public static HttpServletResponse download(String path, HttpServletResponse response) { try { File file = new File(path); String filename = file.getName();...
  • DownloadFile

    2018-11-28 16:17:39
    本android实例主要是针对文件下载,下载文件有多种类型,如果是zip,则进行解压,如果是apk,则进行自动安装,已经做了7.0和8.0适配,还有附录很多下载链接,可供测试使用。
  • javaWeb实现文件下载

    万次阅读 热门讨论 2017-11-22 11:21:06
    今天学习了JavaWeb实现文件下载,为了以后方便查找并让需要的人学习,今儿把代码献上!!!! 首先写一个jsp页面 字体加粗的为主要内容: download.jsp: String path = request.getContextPath(); String...
  • JS实现html页面点击下载文件(共两种实现方法)

    万次阅读 多人点赞 2017-10-31 16:22:49
    1.使用<a>标签来完成 <a href="/user/test/xxxx...但是有个情况,比如txt,png,jpg等这些浏览器支持直接打开的文件是不会执行下载任务的,而是会直接打开文件,这个时候就需要给a标签添加一个属性“downlo...
  • javaweb文件的上传与下载

    万次阅读 热门讨论 2018-08-24 14:14:53
    一、文件上传 要实现Web开发的上传功能,通常需要完成两步操作:一是在Web页面中添加上传输入项;二是在Servlet中读取上传文件的数据,并保存到本地硬盘中。 上传大多数情况是通过表单的形式提交给服务器,使用&...
  • 前端vue中文件下载的几种方式

    万次阅读 多人点赞 2019-04-03 10:05:23
    第一种方式是前端创建超链接,通过a标签的链接向后端服务发get请求,接收后端的文件流,非常简单: <a :href='"/user/downloadExcel"' >下载模板</a> 另一种情况是创建div标签,动态创建a标签: <...
  • 1.因为是文件下载,所以在取后台数据的时候,要多传递一个【responseType: ‘blob’】这个参数,是为了最后数据返回时response的data为【blob】文件格式(data: Blob {size: 22528, type: “application/vnd.ms-...
  • sharepoint文档文件下载

    千次阅读 2018-05-22 17:19:58
    /// &lt;summary&gt; /// 文档文档复制,获取文件 /// &lt;/summary&gt; public void DownloadFile() { try { string IDstr = this.Request...
  • vue 文件下载

    千次阅读 2019-09-29 09:48:43
    文件下载流程 本文章针对于前端基于Blob对象创建文件实现文件下载 直奔代码: // 首先创建数据对象 const data = {hello: "world"}; // 创建Blob并指定mine类型 const blob = new Blob([JSON.stringify(data)], {...
  • Layui文件下载

    万次阅读 2019-09-10 09:27:20
    Layui超实用10篇技术解决方案:https://blog.csdn.net/libusi001/article/details/100065911 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 一、内容主体区域 <div class="layui-body"> ... <...
  • angular7中文件下载功能(图片、文档)

    千次阅读 2019-07-03 11:40:45
    在angular中实现文件下载功能,暂不支持pdf格式,因为pdf会直接预览 H5的下载方式: <!-- <td class="underline"><a [href]="item.URL" [download]="item.DocName">{{item.DocName}}</a></...
  • springMVC 文件下载

    万次阅读 多人点赞 2014-03-07 23:56:36
    package com.clj.test.down.util; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.springframework.context.annotation.Scope;...import org.springframewo

空空如也

1 2 3 4 5 ... 20
收藏数 3,339,561
精华内容 1,335,824
关键字:

文件下载