这篇文章主要介绍了射流研究…端基于下载。射流研究…实现图片、视频时直接下载而不是打开预览,需要的朋友可以参考下
项目中的附件列表,通常情况都需要提供下载、删除的功能,功能本身没有什么要说的,都是基本功能,使用浏览器的的下载功能,也都是用window.open(url),或者window.location.href=url的方式,网址即为附件下载接口,浏览器自动解析,如果是图片、视频、txt等格式的会直接预览文件,而不是像docx、xlsx一样直接下载,项目中为了功能明确,将预览单独加了一个查看按钮,下载按钮要实现无论什么文件格式都直接下载。
有两种方式处理:
一。后台接口层面处理:(比较常见)
响应头中添加标识:
回应AddHeader('内容-处置','附件文件名='
属性UrlEncode(批注。文件名,系统正文。编码。utf8));
添加后,浏览器就会全都直接下载,不区分文件格式
二.前端JS使用XMLHttpRequest结合download.js处理
1)首先页面中需要引用下载。射流研究…
下载官方:http://danml.com/download.html
http://danml.com/js/download2.js
2)公共方法
/*
* 使用下载。射流研究…强制浏览器下载图片、视频等文件
* @param {any} url url链接地址
* @param {any} strFileName文件名
* @ param { any } strMimeType文件类型
* dzl
* 2020年5月8日
*/
函数下载文件(url,strFileName,strmetype){
var xmlHttp=null
如果(窗口ActiveXObject) {
//IE6,IE5浏览器执行代码
xmlHttp=新建ActiveX对象(' Microsoft .XMLHTTP’);
} else if(窗口XMLHttpRequest) {
//IE7,火狐、Chrome、Opera、Safari浏览器执行代码
xmlHttp=new XMLHttpRequest();
}
//2.如果实例化成功,就调用打开()方法:
if (xmlHttp!=null) {
xmlHttp.open('get ',url,true);
xmlHttp.responseType=' blob//关键
xmlhttp。send();
xmlhttp。onreadystatechange=do结果;//设置回调函数
}
函数doResult() {
if (xmlHttp.readyState==4) { //4表示执行完成
if (xmlHttp.status==200) { //200表示执行成功
下载(xmlHttp.response,strFileName,str mime type);
}
}
}
}
注意:xmlHttp.responseType=' blob是关键,必须要设置
3)下载按钮点击事件中调用公共方法
下载文件(网址,文件名,获取文件类型(文件名))
附上根据文件名的尾缀返回文件类型的公共方法:
/*
* 根据文件名的尾缀返回文件类型
* @param {any}文件名文件名
* dzl
* 2020年5月9日
*/
函数getFileType(文件名){
//后缀获取
让后缀="";
//获取类型结果
假设结果="";
尝试{
const flieArr=fileName.split(' . ');
后缀=flieArr[flieArr。长度-1];
} catch (err) {
后缀="";
}
//文件名无后缀返回错误的
如果(!后缀){返回false}
后缀=后缀。tolocalelowercase();
//图片格式
const imglist=['png ',' jpg ',' jpeg ',' bmp ',' gif '];
//进行图片匹配
结果=img列表。查找(item=item===后缀);
如果(结果){
返回"图像";
}
//匹配文本文件(文本文件)
const txt list=[' txt '];
结果=txt列表。查找(item=item===后缀);
如果(结果){
返回”txt”;
}
//匹配擅长
const excelist=['xls ',' xlsx '];
结果=excelist。查找(item=item===后缀);
如果(结果){
返回”excel”;
}
//匹配单词
const wordlist=['doc ',' docx '];
结果=单词列表。查找(item=item===后缀);
如果(结果){
返回"单词";
}
//匹配可移植文档格式文件的扩展名(可移植文档格式的缩写)
const pdflist=[' pdf '];
result=pdflist。查找(item=item===后缀);
如果(结果){
返回”pdf”;
}
//匹配ppt
const pptlist=['ppt ',' pptx '];
结果=PPT列表。查找(item=item===后缀);
如果(结果){
返回PPT ';
}
//匹配视频
const videolist=['mp4 ',' m2v ',' mkv ',' rmvb ',' wmv ',' avi ',' flv ',' mov ',' m4v '];
结果=视频列表。查找(item=item===后缀);
如果(结果){
返回"视频";
}
//匹配音频
const radiolist=['mp3 ',' wav ',' wmv '];
结果=放射科医生。查找(item=item===后缀);
如果(结果){
返回"收音机";
}
//其他文件类型
返回"其他";
}
下载.射流研究…源码
//download.js v4.21,由dandavis2008-2018。[麻省理工学院]有关测试/用法,请参见http://danml.com/download.html
//v1实现了一种法国法郎铬合金兼容的下载字符串到本地未命名文件的方式,升级到使用隐藏框架和可选的哑剧
//v2通过[下载]、msSaveBlob、IE (10)支持和窗口添加了命名文件网址。支持比数据统一资源定位器更大更快的保存
//v3添加了数据URL和一滴输入、绑定切换arity,并且通过强制下载哑剧和base64支持改进了传统的数据URL回退。3.1改进了旅行队操作。
//v4增加了AMD/UMD、通用和普通浏览器支持
//4.1版通过单独的全球资源定位器(Uniform Resource Locator)参数添加了统一资源定位器下载功能(仅限相同的域/CORS)
//v4.2增加了语义变量名、长(超过2MB)数据统一资源定位器支持和默认隐藏临时锚
//https://github . com/rndme/下载
(函数(根,工厂){
if(类型定义==='函数'定义。amd){
//AMD .注册为匿名模块。
定义([],工厂);
} else if(导出类型==='object') {
//节点。不适用于严格的CommonJS,但是
//仅支持模块.导出的类似CommonJS的环境,
//喜欢节点。
模块。出口=工厂();
}否则{
//浏览器全局(根是窗口)
根。下载=工厂();
}
}(这个,函数(){
返回函数下载(data,strFileName,strMimeType) {
var self=window,//这个脚本只适用于浏览器.
默认Mime=' application/octet-stream ',//此默认哑剧也触发内联框架下载
mime type=str mime type | |默认mime,
有效载荷=数据,
url=!strFileName!strMimeType有效负载,
锚=文档。createelement(“a”),
toString=函数(a){返回字符串(一);},
myBlob=(self .Blob ||自己MozBlob ||自己WebKitBlob || toString),
fileName=strFileName || '下载',
斑点,
读者;
myBlob=myBlob.call?我的斑点。绑定(自身):Blob
if(String(this)===' true '){//反转参数,允许download.bind(true,' text/xml ',' export.xml ')作为回调
有效负载=[有效负载,mime类型];
mimeType=有效负载[0];
有效负载=有效负载[1];
}
if(url url.length 2048){ //如果没有文件名和哑剧,则假定全球资源定位器(Uniform Resource Locator)作为唯一的参数传递
fileName=url.split('/').pop().拆分('?')[0];
anchor.href=url//将href属性分配给临时定位点
if(anchor.href.indexOf(url)!==-1){ //如果浏览器确定它是一个潜在的有效全球资源定位器(Uniform Resource Locator)路径:
var Ajax=new XMLHttpRequest();
ajax.open( 'GET ',url,true);
ajax.responseType=' blob
ajax.onload=function(e){
下载(e.target.response,文件名,默认mime);
};
setTimeout(function(){ Ajax。send();}, 0);//允许使用返回设置自定义创建交互式、快速动态网页应用的网页开发技术标头:
返回创建交互式、快速动态网页应用的网页开发技术
} //有效全球资源定位器(Uniform Resource Locator)是否结束?
} //结束如果网址?
//继续并立即下载数据统一资源定位器
if(/^data:([\w-]\/[\ w-])?[,]/.测试(有效负载)){
如果(有效载荷。长度(1024 * 1024 * 1.999)我的blob!==toString ){
有效负载=dataUrlToBlob(有效载荷);
mime类型=有效负载。type | |默认mime
}否则{
返回navigator.msSaveBlob?//IE10不能做一个【下载】,只能斑点:
领航员。mssavelob(dataUrlToBlob(有效负载),文件名) :
拯救者(有效载荷);//其他人可以保存未处理的数据统一资源定位器
}
} else {//不是数据url,是有特殊需求的字符串吗?
if(/([\x80-\xff])/.测试(有效负载)){
var i=0,tempUiArr=new uint 8数组(有效载荷。length),mx=tempUiArr.length
对于(我;imxI)tempUiArr[I]=有效载荷。charcode at(I);
payload=new myBlob([tempUiArr],{ type:mime type });
}
}
斑点=我的斑点的有效负载实例?
有效载荷:
新建我的blob([有效负载],{ type:mime type });
函数dataUrlToBlob(strUrl) {
var parts=strurl。拆分(/[:]/),
类型=零件[1],
索引解码器=strurl。(' charset ')0的索引?3: 2,
decoder=parts[index decoder]==' base 64 '?atob : decodeURIComponent,
binData=decoder( parts.pop()),
mx=binData.length,
i=0,
ui arr=新uint 8数组(MX);
对于(我;imxI)ui arr[I]=bindata。charcode at(I);
返回新的myBlob([uiArr],{ type:type });
}
函数保护程序(url,winMode){
如果('下载'在主播){//html 5 A[下载]
anchor.href=url
anchor.setAttribute('下载,文件名);
锚。class name=' download-js-link ';
anchor.innerHTML='正在下载.';
锚。风格。display=' none
anchor.addEventListener('click ',函数(e) {
e。停止传播();
这个。removeeventlistener(' click ',参数。被叫方);
});
document.body.appendChild(锚点);
setTimeout(function() {
锚。单击();
文档。身体。移除子对象(锚点);
if(winMode===true){ setTimeout(function(){ self .网址。revokeobjecturl(锚点。href);}, 250 );}
}, 66);
返回真实的
}
//尽我们所能处理非[下载] safari:
如果(/(版本)\/(\d )\(\d)(?\.(\d))?*Safari\//.测试(navigator.userAgent)) {
if(/^data:/.test(URL))URL=' data:' url.replace(/^data:([\w\/\-\])/,default mime);
如果(!window.open(url)){ //阻止弹出窗口,提供直接下载:
如果(确认('显示新文档\ n \使用另存为.'下载,然后单击"上一步"返回到此页面.){ location.href=url}
}
返回真实的
}
//做iframe数据URL下载(老ch FF):
var f=文档。createelement(“iframe”);
文档。身体。appendchild(f);
如果(!温莫德/^data:/.测试(url)){ //strong制下载哑剧:
URL=' data:' url.replace(/^data:([\w\/\-\])/,default哑剧);
}
f.src=url
setTimeout(function(){ document。身体。删除子对象(f);}, 333);
}//结束保护程序
如果(导航员。mssavelob){//IE10:(有斑点,但没有[下载]或网址)
返回导航器。mssavelob(blob,文件名);
}
如果(自我. URL){ //使用一滴和统一资源定位器的简单、快速和现代的方法:
拯救者(自我. URL.createObjectURL(blob),true);
}否则{
//处理非斑点()非统一资源定位器浏览器:
if(blob的类型===' string ' | | blob。构造函数===toString){
尝试{
返回保护程序(' data:' mime type ');base64,'自我。btoa(blob));
}catch(y){
return saver( 'data:' mimeType ','编码uri组件(blob));
}
}
//Blob但不支持网址:
reader=新文件读取器();
reader.onload=函数(e){
拯救者(这个。结果);
};
读者。readasdataurl(blob);
}
返回真实的
};/*结束下载()*/
}));
js文件下载插件介绍和使用方法 download.js
在前端想要生成文本文件(文本文件)或者其他格式文件来保存一些数据,或者在数据请求服务器成功后想要将数据生成文件并下载,这些需求还是比较多的,这里使用到的下载. js。既可以满足这些需求。
第一步:下载
1.下载可以在官网上进行下载原网址:download2.js
2.也可以使用我上传的资源(下载与上述官网)免费哦!下载
第二步:引用
1.将下载的文件放在项目中,并使用脚本src=' ./下载2。js '/脚本进行引用(速度快)
2.使用网络引用脚本src=' http://danml。com/js/download 2。js '/脚本
第三步:开始使用
//生成一个文本文件(文本文件)的文件,讲字符串变量潜艇用热中子反应堆(海底热反应堆的缩写)的内容放在里面,并完成下载
var str='hello world可以中文吗?答案:可以的;
download(str,' Text.txt ',' text/plain ');
//也将生成一个文本文件(文本文件)文件,和上面的结果是一摸一样
str='data:text/plain,hello world ';
下载(str,' dlDataUrlText.txt ',' text/plain ');
//将数组或者json对象写入到文件中
var debug={ hello:' world ' };
var Blob=new Blob([JSON。stringify(debug,null,2)]);
download(blob,' dlTextBlob.txt ',' text/plain ');
var str='hello world ',arr=new uint 8 array(str。长度);
str.split(" ").forEach(函数(a,b){
arr[b]=a . charcodeat();
});
下载(arr,' textUInt8Array.txt ',' text/plain ');
//将超文本标记语言页面中的一部分生成单独的超文本标记语言文档
下载(document.body.outerHTML,' dlHTML.html ',' text/html ');
//给字符串添加标签,或者超文本标记语言片段直接给方法,将会生成对应内容的文件
下载(新Blob(['hello world .bold()])、' dlHtmlBlob.html '、'文本/html ');
//将创建交互式、快速动态网页应用的网页开发技术查询回来的结果,赋值给文件,并下载
$.ajax({
URL:“/download . html”,
成功:download.bind(true、text/html、dlAjaxCallback.html)
});
//将图片的64号基地装入到图片中并下载。
下载(' data:image/gif);第64基地,第5区,第七区,第39区,第64区,第64区,第5区,第七区,第39区,第39区,第64区,第64区,第5区,第七区,第39区,第39区
//使用xhr函数获取本域名下文件,并封装到文件进行下载。这里的前提是xhr函数访问的文件必须和该程序执行在同一域名下,
//否则会报跨域的问题。比如此程序执行在本地主机下面,而这里的访问地址使用的是http://danml.com,就会访问不成功。
var x=new xmlhttprequest();
x.open('GET ',' http://danml.com/wave2.gif ',true);
十。responsetype=' blob
x .=函数。]
下载(x . response ," dlbinajax。gif)”、“image/gif”);
}:
x.send():
扩展:还可以使用文件上传再下载进行测试。
input id=' file ' type=' file 'n change=' download(this . files[0],this。文件[0]).名称,this.files[0].类型)
以上就是联署材料端基于下载。js-下载。射流研究…实现图片~我爱你~视频时直接下载而不是打开预览的详细内容,更多关于联署材料实现图片~我爱你~视频时直接下载的资料请关注我们其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。