如何在点击a标签下载文件的时候通过JavaScript动态的修改文件的名称?

比如说,我在页面上有这样两个个a标签:前面一个是用来打开一个在线编辑页面,并将文件路径参数传递到该页面的a标签。后面则是真正的下载a标签。但是现在的情况是,由于上传文件名... 比如说,我在页面上有这样两个个a标签:

前面一个是用来打开一个在线编辑页面,并将文件路径参数传递到该页面的a标签。
后面则是真正的下载a标签。但是现在的情况是,由于上传文件名存在重复,所以程序就自动生成了文件名。

现在想做的是,能不能在点击[下载]的时候,能将下载文件名改成原来的文件名。 尽量只使用前台的JavaScript,因为后台逻辑是别人写的,我不想该。
展开
 我来答
淡忘ww5
2019-07-15
知道答主
回答量:4
采纳率:0%
帮助的人:1121
展开全部

<script type="text/javascript">

$("a").click(function () {

var href = this;

var url = href.href;

var name = href.innerHTML;

if (url.indexOf("kindeditor") >= 0) {

download(url, name);

return false;

}

})

/**

* 下载

* @param  {String} url 目标文件地址

* @param  {String} filename 想要保存的文件名称

*/

function download(url, filename) {

getBlob(url, function (blob) {

saveAs(blob, filename);

});

};

/**

* 获取 blob

* @param  {String} url 目标文件地址

* @return {cb} 

*/

function getBlob(url, cb) {

var xhr = new XMLHttpRequest();

xhr.open('GET', url, true);

xhr.responseType = 'blob';

xhr.onload = function () {

if (xhr.status === 200) {

cb(xhr.response);

}

};

xhr.send();

}

/**

* 保存

* @param  {Blob} blob     

* @param  {String} filename 想要保存的文件名称

*/

function saveAs(blob, filename) {

if (window.navigator.msSaveOrOpenBlob) {

navigator.msSaveBlob(blob, filename);

} else {

var link = document.createElement('a');

var body = document.querySelector('body');

link.href = window.URL.createObjectURL(blob);

link.download = filename;

// fix Firefox

link.style.display = 'none';

body.appendChild(link);

link.click();

body.removeChild(link);

window.URL.revokeObjectURL(link.href);

};

}

</script>


ck_2036
2013-04-23 · TA获得超过906个赞
知道小有建树答主
回答量:904
采纳率:33%
帮助的人:732万
展开全部
前台办不到的! 让后台改去
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hbxflzh
2013-04-23 · TA获得超过367个赞
知道小有建树答主
回答量:541
采纳率:100%
帮助的人:361万
展开全部
  我想问下你是不是想把 635000676971250000.ppt 显示成 OA培训130327.ppt???
  如果你不想修改后台代码,我说下你看看这个方法可以不。你在a标签中再加个参数。
  例如:../DaoFramer/ReadFile.aspx?FilePath=635000676971250000.ppt&name=OA培训130327.ppt,然后你在ReadFile.aspx这个页面的Js中修改。

  var path=window.location.search;//返回?以后的内容,path值为?FilePath=635000676971250000.ppt&name=OA培训130327.ppt、
  var name=path.split("&")[1].split("=")[1];//获取OA培训130327.ppt的值
  然后在页面加载的最后 把值替换
更多追问追答
追问
你说加载替换是替换哪个部分?
把第二个下载a标签的路径替换吗?
实际上传后的文件名就是一个数字了,原来的名字只是记录在数据库里的一个字符串。
我现在希望这样解决。
在[下载]标签上加一个click事件,在点击下载的时候,将下载到用户桌面上的那个文件名改成原来的名字。原来的名字在html上也好找。就是这个下载标签的前一个a标签的innerText属性。
追答

你的a 标签是连接到ReadFile.aspx 这是另外一个页面,所以你要改的话必须到ReadFile.aspx这个页面去修改。

我说的替换时指

你可以把红框里面的内容用一个标签包起来,然后在页面加载的最后,显示你想显示的名称。

本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式