精华内容
下载资源
问答
  • Vue实现文件上传和文件下载

    万次阅读 2018-08-22 22:09:55
    文件下载文件下载通常有几种方法 1.通过url下载 2.location.href 3.form提交直接下载 4.HTML5 a.download结合blob对象进行下载 第一种方式: 第一种方法是前后端的接口只给了一个API请求: 前端第一个...

    文件下载:
    文件下载通常有几种方法
    1.通过url下载
    2.location.href
    3.form提交直接下载
    4.HTML5 a.download结合blob对象进行下载
    第一种方式:
    第一种方法是前后端的接口只给了一个API请求:
    前端第一个实现是使用a标签,

    第二种方式:
    这个方法是直接把 DataURLs 或者 BlogURLs 传到浏览器地址中触发下载。有两种方式:

    window.location.href = urls; // 本窗口打开下载
    window.open(urls, '_blank'); // 新开窗口下载
    

    第三种:
    标签的download是HTML5标准新增的属性,作用是指示浏览器下载URL而不是导航到URL,因此将提示用户将其保存为本地文件。
    这种是定义的接口不是下载文件的路径,而是通过API可以获得文件的内容,由前端把内容写入到文件中,这种方法是通过获取文件信息,在网页上利用click事件,创建一个文件,然后将文件信息写入到文件中,然后保存

          this.content = content
          this.filename = filename
          const blob = new Blob([this.content])
          if (window.navigator.msSaveOrOpenBlob) {
            // 兼容IE10
            navigator.msSaveBlob(blob, this.filename)
          } else {
            //  chrome/firefox
            let aTag = document.createElement('a')
            aTag.download = this.filename
            aTag.href = URL.createObjectURL(blob)
            aTag.click()
            URL.revokeObjectURL(aTag.href)
          }
    

    第四种form表单
    不需要我们处理返回二进制流直接下载,非常方便
    form的action设置为接口地址,method设置为post,Post到后台的数据设置为input的属性 name = key,value = value的形式,如果有多个key、value的值要传递,那么就设置多个input来分别储存单个的key、value;
    如果请求的接口可以不需要参数,那么input还是必须要一个,如果不要得话 会引起接口报错
    原理:form的action相当于一个浏览器本页签/页面的一个请求,不会被后台,前台的路由拦截。所以能够提交成功。

    注意点:如果设置method为get,在action中的uri添加了参数的话,想用这个参数替代input的key、value形式来提交到后台,这参数是没有效果的,后台拿不到这些参数,真正的参数还是以input的name、value的形式储存,在submit方法执行后传递到后台。
    这样我们就是实现了文件下载,但是表单提交的数据一般是简单的键值对,如果传参比较复杂可以考虑将表单序列化提交。

    因为项目是基于vue的,而且提交的请求参数涉及很多参数,比较复杂,所以采用了方法三来实现

          axios.post('/rest/inventory/oh_status/info/excel', {
            site: this.selectedsite,
            bu: this.selectedbu,
            ohHealthStatus: this.selectedtitle,
            ohHealthRootcause: this.selectedblock,
            search: this.search,
            sort: this.sort
          }, {responseType: 'arraybuffer'}).then(this.ExportFile).catch(function (error) {
            console.log(error)
          })
    
         this.content = content
          this.filename = filename
          const blob = new Blob([this.content])
          if (window.navigator.msSaveOrOpenBlob) {
            // 兼容IE10
            navigator.msSaveBlob(blob, this.filename)
          } else {
            //  chrome/firefox
            let aTag = document.createElement('a')
            aTag.download = this.filename
            aTag.href = URL.createObjectURL(blob)
            aTag.click()
            URL.revokeObjectURL(aTag.href)
          }
    

    注意我们发送请求的时候一定要写上responseType,{responseType: 'arraybuffer'} 否则下载下来的文件打不开!!!

    文件上传
    文件上传通常使用form表单,但是有时候我们不想要用表单,ES6的fromData来实现

        handleGetFile (data) {
          this.file = data
          let formdata = new FormData()
          formdata.append('file', this.file)
          formdata.append('submit', false)
          let config = {
            headers: {
              'Content-Type': 'multipart/form-data'
            }
          }
          axios.post('/rest/master_data/ct2r/odin_delivery_metrics/cvc/file_upload_review', formdata, config).then(this.sendFileSucc)
        },
    

    首先 我们获取完文件之后,创建FormData对象,配置头部,发送该请求就OK了,别忘了让后台将接收头部请求改为formdata的格式

    如果文件是图片或者视频的话,部分浏览器会直接打开,非下载,这个时候我们可以在下载链接 url 后面加上 ?response-content-type=application/octet-stream 这个参数可以实现点击下载功能。

    展开全文
  • 文件下载 //下载单个文件 public void downloadFile(HttpServletResponse response){ String path = "D:\test\ce\1.txt" File file = new File(path); if(file.exists()){ String fil...

    微信搜索:“二十同学” 公众号,欢迎关注一条不一样的成长之路

    单文件下载

    //下载单个文件
    public void downloadFile(HttpServletResponse response){
            String path = "D:\test\ce\1.txt"
            File file = new File(path);
            if(file.exists()){
    
                String fileName = file.getName();
                response.setHeader("Content-Disposition", "attachment;fileName=" + fileName);
                download(response,file);
    
            }
        }
    
    
    public void download(HttpServletResponse response,File file){
    
    
            FileInputStream fis = null;
            BufferedInputStream bis = null;
            OutputStream os = null;
    
            try {
                os = response.getOutputStream();
                fis = new FileInputStream(file);
                bis = new BufferedInputStream(fis);
                byte[] buffer = new byte[bis.available()];
                int i = bis.read(buffer);
                while(i != -1){
                    os.write(buffer, 0, i);
                    i = bis.read(buffer);
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                bis.close();
                fis.close();
                os.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    多文件压缩下载

    //多个文件,压缩成zip后下载
    public void downloadMoreFile(HttpServletResponse response) {
    
            
            String test1= "D:\test\ce\1.txt";
            String test2= "D:\test\ce\2.txt";
    
            File tfile= new File(test1);
            File cfile= new File(test2);
    
            List<File> files = new ArrayList<>();
            files.add(tfile);
            files.add(cfile);
            if (tfile.exists() && cfile.exists()) {
    
                String zipTmp = "D:\test\ce\1.zip";
                zipd(zipTmp,files,response);
    
             
            }
        }
    
    public void zipd(String zipTmp,List<File> files,HttpServletResponse response){
            File zipTmpFile = new File(zipTmp);
            try {
                if (zipTmpFile.exists()) {
                    zipTmpFile.delete();
                }
                zipTmpFile.createNewFile();
    
                response.reset();
                // 创建文件输出流
                FileOutputStream fous = new FileOutputStream(zipTmpFile);
                ZipOutputStream zipOut = new ZipOutputStream(fous);
                zipFile(files, zipOut);
                zipOut.close();
                fous.close();
                downloadZip(zipTmpFile, response);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
     
        //files打成压缩包
        public void zipFile(List files, ZipOutputStream outputStream) {
            int size = files.size();
            for (int i = 0; i < size; i++) {
                File file = (File) files.get(i);
                zipFile(file, outputStream);
            }
        }
    
     
        public void zipFile(File inputFile, ZipOutputStream ouputStream) {
            try {
                if (inputFile.exists()) {
                    if (inputFile.isFile()) {
                        FileInputStream IN = new FileInputStream(inputFile);
                        BufferedInputStream bins = new BufferedInputStream(IN, 512);
                        ZipEntry entry = new ZipEntry(inputFile.getName());
                        ouputStream.putNextEntry(entry);
    
                        int nNumber;
                        byte[] buffer = new byte[512];
                        while ((nNumber = bins.read(buffer)) != -1) {
                            ouputStream.write(buffer, 0, nNumber);
                        }
         
                        bins.close();
                        IN.close();
                    } else {
                        try {
                            File[] files = inputFile.listFiles();
                            for (int i = 0; i < files.length; i++) {
                                zipFile(files[i], ouputStream);
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    public static HttpServletResponse downloadZip(File file, HttpServletResponse response) {
            if (file.exists() == false) {
                System.out.println("待压缩的文件目录:" + file + "不存在.");
            } else {
                try {
                    // 以流的形式下载文件。
                    InputStream fis = new BufferedInputStream(new FileInputStream(file.getPath()));
                    byte[] buffer = new byte[fis.available()];
                    fis.read(buffer);
                    fis.close();
                    // 清空response
                    response.reset();
    
                    OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
                    response.setContentType("application/octet-stream");
    
                    // 如果输出的是中文名的文件,在此处就要用URLEncoder.encode方法进行处理
                    response.setHeader("Content-Disposition",
                            "attachment;filename=" + new String(file.getName().getBytes("GB2312"), "ISO8859-1"));
                    toClient.write(buffer);
                    toClient.flush();
                    toClient.close();
                } catch (Exception ex) {
                    ex.printStackTrace();
                } finally {
                    try {
                        File f = new File(file.getPath());
                        f.delete();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
            return response;
        }
    

     

    展开全文
  • selenium 文件下载

    万次阅读 2019-04-15 11:40:09
    Firefox 文件下载 对于Firefox,需要我们设置其Profile: browser.download.dir:指定下载路径 browser.download.folderList:设置成 2 表示使用自定义下载路径;设置成 0 表示下载到桌面;设置成 1 表示下载到默认...
    Firefox 文件下载
    对于Firefox,需要我们设置其Profile:
    
    
    browser.download.dir:指定下载路径
    
    browser.download.folderList:设置成 2 表示使用自定义下载路径;设置成 0 表示下载到桌面;设置成 1 表示下载到默认路径
    
    browser.download.manager.showWhenStarting:在开始下载时是否显示下载管理器
    
    browser.helperApps.neverAsk.saveToDisk:对所给出文件类型不再弹出框进行询问
    
    下面来个示例:
    # -*- coding: utf-8 -*-
    
    from selenium import webdriver
    from time import sleep
    
    profile = webdriver.FirefoxProfile()
    profile.set_preference('browser.download.dir', 'd:\\')
    profile.set_preference('browser.download.folderList', 2)
    profile.set_preference('browser.download.manager.showWhenStarting', False)
    profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/zip')
    
    driver = webdriver.Firefox(firefox_profile=profile)
    
    driver.get('http://sahitest.com/demo/saveAs.htm')
    driver.find_element_by_xpath('//a[text()="testsaveas.zip"]').click()
    sleep(3)
    driver.quit()
    
    Firefox需要针对每种文件类型进行设置,这里需要我们查询对应文件的MIME类型,可以用以下链接进行查询:MIME 参考手册
    Chrome 文件下载
    Chrome浏览器类似,设置其options:
    
    
    download.default_directory:设置下载路径
    
    profile.default_content_settings.popups:设置为 0 禁止弹出窗口
    
    它的设置就简单多了,看个示例:
    # -*- coding: utf-8 -*-
    
    from selenium import webdriver
    from time import sleep
    
    options = webdriver.ChromeOptions()
    prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory': 'd:\\'}
    options.add_experimental_option('prefs', prefs)
    
    driver = webdriver.Chrome(executable_path='D:\\chromedriver.exe', chrome_options=options)
    driver.get('http://sahitest.com/demo/saveAs.htm')
    driver.find_element_by_xpath('//a[text()="testsaveas.zip"]').click()
    sleep(3)
    driver.quit()
    
    作者:灰蓝蓝蓝蓝蓝蓝
    链接:https://www.jianshu.com/p/b03ef6ffc4a5
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
    
    展开全文
  • SpringBoot实现文件下载

    万次阅读 热门讨论 2019-04-18 20:33:58
    在写java 的文件下载的时候一直抛出异常 getOutputStream() has already been called for this response 抛出异常getOutputStream() has already been called for this response 直到使用了下面的方法: /** ...

    在写java 的文件下载的时候一直抛出异常

    getOutputStream() has already been called for this response

    抛出异常getOutputStream() has already been called for this response

    直到使用了下面的方法:

     /**
         * 稿源周报excel表格下载
         * @return
         */
    
        @RequestMapping(value = "/downExcel", method = RequestMethod.GET, produces = "application/json;charset=UTF-8")
        @ResponseBody
        public String downExcel(HttpServletResponse response) throws UnsupportedEncodingException {
            LocalDate end = LocalDate.now();
            LocalDate start = end.minusDays(14);
            String filename = "稿源抓取周报-" + end.format(DateTimeFormatter.ISO_DATE) + ".xlsx";
            String filepath = "files/" + filename;
            writeExcelFile(start, end, filepath);
            // 如果文件名不为空,则进行下载
            if (filename != null) {
                File file = new File(filepath);
                // 如果文件存在,则进行下载
                if (file.exists()) {
                    // 配置文件下载
                    response.setHeader("content-type", "application/octet-stream");
                    response.setContentType("application/octet-stream");
                    // 下载文件能正常显示中文
                    response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
                    // 实现文件下载
                    byte[] buffer = new byte[1024];
                    FileInputStream fis = null;
                    BufferedInputStream bis = null;
                    try {
                        fis = new FileInputStream(file);
                        bis = new BufferedInputStream(fis);
                        OutputStream os = response.getOutputStream();
                        int i = bis.read(buffer);
                        while (i != -1) {
                            os.write(buffer, 0, i);
                            i = bis.read(buffer);
                        }
                        System.out.println("Download  successfully!");
                        return "successfully";
    
                    } catch (Exception e) {
                        System.out.println("Download  failed!");
                        return "failed";
    
                    } finally {
                        if (bis != null) {
                            try {
                                bis.close();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                        if (fis != null) {
                            try {
                                fis.close();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }
            }
            return "";
        }
    

    后来又出现了 一个问题就是后台不抛出异常,也不出现下载的提示发现了以下问题
     如果要用ajax 发送的话,则浏览器没有任何反应  因为ajax返回的格式是  字符的格式 

      $.ajax({
           url:"/down/downExcel",
           type:"GET",
           dataType:"json",
           success:function(result){
    }}); 

    换成:

    window.location.href="/down/downExcel";

    OK!

    展开全文
  • springboot-单文件多文件下载Zip

    万次阅读 2019-12-09 13:17:52
    3.把压缩文件通过输出流传输给客户端(注意:必须在zipoutputstream流关闭后,否则下载下的文件会报不可预料的压缩文件末端) 4.删除服务器上的临时文件文件 public void downImg(HttpServletResponse response,...
  • 文件下载一次后,重复下载,或者又下载同名文件,会把之前的下载覆盖吗,这时应该怎么做, 可以向windows那样,加(1),(2)吗
  • 文件下载测试

    万次阅读 2019-06-04 13:36:59
    文件下载测试 开始测试前没有考虑文件里的内容会不会影响下载功能 结果1文件里的内容是数字时,可以正常下载 2文件里的内容是汉字时,下载失败 在链接地址的详情页面有下载按钮 如下图是附件信息的详情页面 ...
  • springboot文件下载

    万次阅读 2019-01-24 11:59:34
    JAVA后台实现文件下载 使用springboot框架,我在本地项目中放了一个文件,然后前台来下载该文件。本人遇到的比较明显的问题: spring获取当前项目路径 String downloadPath = ClassUtils....
  • 最近业务包含一个视频播放,发现一个问题:我们的视频文件在在自己的文件服务器,文件服务器开发的文件获取接口是下载文件,当有视频播放的时候,浏览器客户端会在视频文件下载完毕后开始播放。 ...
  • JAVA中文件下载和文件批量下载方法

    千次阅读 2019-04-22 15:09:50
    JAVA中的文件下载: /** * 文件下载 * @param request * @param response * @param filePath 文件路径 * @param filename 下载时文件名称 */ public static void downLoadFile(HttpServletRequest request,...
  • vue 文件下载

    千次阅读 2018-08-30 16:35:54
    vue 文件下载 1.一般我们下载文件基本会使用a标签下载 &lt;a href="xxxx.txt" download="文件名.txt"&gt;点击下载&lt;/a&gt; 但是有个问题,当浏览器可以打开这些...
  • 接上一篇,文件下载需要获取下载文件的存储路径,这里只是手动填入,如果是在具体项目中,可以把文件名和上传后的存储路径保存在数据库中。然后增加一个文件列表的页面展示文件名和文件路径,然后点击下载的时候把...
  • 百度云网页下载大文件总是提示跳转到...我们可以拦截文件下载的地址,然后采用迅雷下载或者是采用idm下载。网上给出了很多教程,但是感觉还是说得不够详细,我这里放出一张详细的教程,让小白用户也能够会用。 ...
  • java实现文件下载

    万次阅读 2019-07-07 09:45:31
    原理是使用java.io中的File类打开要下载的文件,用输入流将文件读入系统,再将response中的输出流连接到系统,通过输入流和输出流进行文件下载。 在response的响应头中设置下载文件的文件名 /** * 下载文件 * @...
  • 程序员在做web等项目的时候,往往都需要添加文件上传、下载、删除的功能,有时是单文件,有时多文件批量 操作,而这些功能的代码程序员可以自己收藏起来当成工具使用,这样,程序员在进行程序设计的时候就会事半功倍...
  • mui文件下载

    千次阅读 2018-04-25 19:53:18
    MUI文件下载mui app升级方法或者mui 文件下载downloader方法参考:前端代码javascript如下:var dtask=null; function createDownloadTask(){ if ( dtask ) { outLine( "下载任务已创建!" ); return...
  • 其中一个页面里有文件下载的功能,参照现有的方法完成代码逻辑的编写,之后用postman做测试,发现这个文件下载的接口并不能正常使用 尝试解决问题 开始我以为是postman不支持从接口下载文件,于是写了测试页面,在...
  • Java实现文件下载

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

    千次阅读 2017-02-07 15:16:02
    Jersey 文件下载Jersey实现文件下载有两种方式,一种是直接将文件作为响应体,一种是使用StreamingOutput对象作为响应体。一、使用文件对象作为响应体Jersey支持直接使用文件对象作为响应体实现下载功能,但是需要...
  • H5文件下载

    万次阅读 2018-12-16 14:53:22
    &lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;head&...文件下载&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;!-- 注意下文件路
  • Android xUtils3 文件下载

    万次阅读 热门讨论 2016-04-25 13:32:45
    基于xUtils3实现单个文件,由于官方sample的文件下载实现较为复杂,所以本文简单实现了文件下载功能。 1、集成xUtils3,采用gradle方式 2、权限 3、初始化,这个类要在AndroidManifest.xml文件节点下配置 4、下载...
  • 安装libcurl,在QT中配置libcurl环境,编写历程使用https、http下载文件。本文包含了:libcurl的下载与安装,libcurl文件下载案例,QT中配置libcurl环境。
  • 文件下载分为小文件下载与大文件下载文件下载小文件可以是一张图片,或者一个文件,这里指在现行的网络状况下基本上不需要等待很久就能下载好的文件。这里以picjumbo里的一张图片为例子。NSData方式其实我们经常用...
  • 后端返回文件流,前端需要对返回的文件流处理进行文件下载 先是发送请求的时候声明返回blob格式 url: '',(你的地址) method: 'post', data: params, responseType: 'blob' (这里很重要) 然后将返回的数据传给...
  • beego文件下载

    千次阅读 2018-01-06 11:00:12
    file.go 路由设置 beego.Router("/file/download", &controllers.FileUploadController{}, "get:Download") 效果图 可以自己设置文件名称的参数 ...biiego文件下载上传代码 github 觉得不错Star下
  • java 文件下载

    万次阅读 2016-06-14 16:56:15
    文件下载,无非是通过流读取文件然后写出文件@RequestMapping("/download") @ResponseBody //filename 为上传存的文件名称,例如:201601011111_2345.png public void downloadFile(String filename, ...
  • java实现高效文件下载

    万次阅读 多人点赞 2018-06-15 22:19:43
    java实现高效文件下载 本文我们介绍几种方法下载文件。从基本JAVA IO 到 NIO包,也介绍第三方库的一些方法,如Async Http Client 和 Apache Commons IO. 最后我们还讨论在连接断开后如何恢复下载。 使用java IO ...
  • 微信浏览器是屏蔽资源文件下载的,但是微信公众号内如何下载文件呢。只能借助于在其他浏览器打开,也就是跳到其他浏览器进行下载(如图)。 具体的逻辑很简单,就是在需要下载的位置比如:是一个单击事件 &lt;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 568,584
精华内容 227,433
关键字:

文件下载