博客
关于我
下载文件实现的常见方式
阅读量:396 次
发布时间:2019-03-05

本文共 2659 字,大约阅读时间需要 8 分钟。

  下载json、csv、excel、img等文件,而不是直接在浏览器打开,在后台管理系统中很常见。那么都有哪些方式可以实现呢?

  方式一:链接,参数不多

        1. a标签,直接实现

// href 放下载地址; // download 为空,默认是下载地址上的文件名称,可以指定名称,如tp.csv,加download是避免json、img等文件直接在浏览器打开而不是下载;// target="_black"在新页面打开,避免当前页闪屏点击下载// 如需带参,直接在地址后加上url的search参数就可以,注意参数不要太多点击下载

  2. window.open,location.href,借助js,点击按钮,调用方法实现

function downloadFile(url){    window.open(url);}function downloadFile(url){    location.href=url;}

  方式二:iframe

// jsfunction downloadFile(url){    var iframe = document.createElement("iframe");      document.body.appendChild(iframe);      iframe.src =url;}// jqfunction downloadFile(url){     $("body").append($("").attr("src",url);}

  方式三:form表单,参数较多

  1. form表单,不带参

function downloadFile (){      var url = "";      var form = $("
").attr({ action : url, method : "post" }); form.appendTo($("body")).submit(); form.remove(); }

  2. form表单,带参,jq

function downloadFile (data, url) {      // data格式      // obj {key: val}      // obj {key: [val]}      // obj {key: {key1: val}}      var dataHtml='';      for(var i in data){        var item=data[i];        var type=typeof item;        switch(type){          case 'object':            if($.isArray(item)){              for(var k=0,klen=item.length; k
'+dataHtml+''); }else{ exportForm.html(dataHtml); } $("#export_form").submit(); $('#export_form').remove(); function createInput(name,data){ return '
' } }

  3. form 表单,带参,vue,element-ui

// 组件 download.vue
// 调用

   方式四:前端组织内容,csv方式下载

  参考:https://blog.csdn.net/oscar999/article/details/16342699

  前面三种方式都是通过前端请求后端接口实现下载,但有时需要前端直接组织内容下载。

var dataStr = "col1,col2,col3\nhello,world,english";    var dataChineseStr = "姓名,年龄!\n张三,34\n王五,32\n李四,25";    console.log()    // chrome    if (navigator.appName == "Netscape") {      var blob = new Blob([dataStr], {type: "text/csv,charset=utf-8"});      document.getElementById("btn").href = window.URL.createObjectURL(blob);      var blobChinese = new Blob(['\ufeff'+dataChineseStr], {type: "text/csv,charset=utf-8"});      document.getElementById("btn_chinese").href = window.URL.createObjectURL(blobChinese);    } else {      document.getElementById("btn").href = "data:text/csv;charset=utf-8," + encodeURIComponent(dataStr);      document.getElementById("btn_chinese").href = "data:text/csv;charset=utf-8,\ufeff" + encodeURIComponent(dataStr);    }

 

你可能感兴趣的文章
ASP.NET Core分布式项目实战(oauth2 + oidc 实现 server部分)--学习笔记
查看>>
PyQt5之音乐播放器
查看>>
Redis进阶实践之十八 使用管道模式提高Redis查询的速度
查看>>
SQL注入
查看>>
#2036:改革春风吹满地
查看>>
MPI Maelstrom POJ - 1502 ⭐⭐ 【Dijkstra裸题】
查看>>
P1379 八数码难题 ( A* 算法 与 IDA_star 算法)
查看>>
算法学习笔记: 珂朵莉树
查看>>
Codeforces Round #664 题解(A ~ C)
查看>>
Problem A - Sequence with Digits (数学推导)
查看>>
Problem 330A - Cakeminator (思维)
查看>>
LeetCode75 颜色分类 (三路快排C++实现与应用)
查看>>
docker基础:容器生命周期管理命令
查看>>
C#开发BIMFACE系列35 服务端API之模型对比6:获取模型构建对比分类树
查看>>
C# 规范建议
查看>>
C语言+easyX图形库的推箱子实现
查看>>
反汇编-流程控制语句-2-循环控制语句分析
查看>>
调试vs2019代码的流程
查看>>
游戏外挂基础-概述
查看>>
脱壳与加壳-加壳-6-代码实现加密导入表
查看>>