Javascript HTML重命名下载链接
我有这样一个mp3链接:Javascript HTML重命名下载链接,javascript,html,download,Javascript,Html,Download,我有这样一个mp3链接: http://example.com/932937293723.mp3 但我想在用户下载文件时将其重命名为这样 http://example.com/Artist - Title.mp3 我的代码: <a href="http://example.com/932937293723.mp3" download="Artist - Title.mp3">DOWNLOAD</a> 存储在远程服务器中的mp3文件。我不是那个服务器的所有者。 H
http://example.com/932937293723.mp3
但我想在用户下载文件时将其重命名为这样
http://example.com/Artist - Title.mp3
我的代码:
<a href="http://example.com/932937293723.mp3" download="Artist - Title.mp3">DOWNLOAD</a>
存储在远程服务器中的mp3文件。我不是那个服务器的所有者。
HTML
download
属性似乎不是好的解决方案。因为它不是跨浏览器的。有没有跨浏览器解决方案?Javascript:D您可以使用如下内容(ASP.NET)
在ASPX中
<a href="FileDownloader.aspx?file=encoded_url_to_mp3">Download</a>
在这里寻找其他类型
更新#1-单独使用Javascript,您可以尝试类似的方法,尽管我没有在不同的浏览器中进行测试
function Download(url, fancyFileName)
{
var file = document.createElement('a');
file.href = url;
file.target = '_blank';
file.download = fancyFileName;
var event = document.createEvent('Event');
event.initEvent('click', true, true);
file.dispatchEvent(event);
window.URL.revokeObjectURL(file.href);
}
Download('http://server.com/file.mp3','Artist_file.mp3');
在后端代码中,您可以将文件获取到服务器,将其存储到变量中,从那里重命名它,定义相应的头并返回它。这可能发生在javascript单击启动ajax调用时
发布有关您的backed的更多详细信息,我可以为您提供更多帮助。如果您坚持从前端开始工作,请尝试使用以下代码。getblob方法已折旧,但您需要更新该部分。让我知道
function getBinary(file){
var xhr = new XMLHttpRequest();
xhr.open("GET", file, false);
xhr.overrideMimeType("text/plain; charset=x-user-defined");
xhr.send(null);
return xhr.responseText;
}
function sendBinary(data, url){
var xhr = new XMLHttpRequest();
xhr.open("POST", url, true);
if (typeof XMLHttpRequest.prototype.sendAsBinary == "function") { // Firefox 3 & 4
var tmp = '';
for (var i = 0; i < data.length; i++) tmp += String.fromCharCode(data.charCodeAt(i) & 0xff);
data = tmp;
}
else { // Chrome 9
// http://javascript0.org/wiki/Portable_sendAsBinary
XMLHttpRequest.prototype.sendAsBinary = function(text){
var data = new ArrayBuffer(text.length);
var ui8a = new Uint8Array(data, 0);
for (var i = 0; i < text.length; i++) ui8a[i] = (text.charCodeAt(i) & 0xff);
var bb = new BlobBuilder(); // doesn't exist in Firefox 4
bb.append(data);
var blob = bb.getBlob();
this.send(blob);
}
}
xhr.sendAsBinary(data);
}
var data = getBinary("My music.mp3");
sendBinary(data,'http://www.tonycuffe.com/mp3/tailtoddle_lo.mp3');
函数getBinary(文件){
var xhr=new XMLHttpRequest();
xhr.open(“GET”,file,false);
xhr.overrideMimeType(“text/plain;charset=x-user-defined”);
xhr.send(空);
返回xhr.responseText;
}
函数sendBinary(数据、url){
var xhr=new XMLHttpRequest();
xhr.open(“POST”,url,true);
if(typeof XMLHttpRequest.prototype.sendAsBinary==“函数”){//Firefox 3&4
var tmp='';
对于(var i=0;i下载
属性是适合您情况的最佳解决方案。否则,您必须通过服务器代理此文件以添加适当的头文件。@Prasanth这几乎回答了我的问题thx kevin。好主意!,你能给我一个客户端解决方案吗:)难以置信@凯文,让我保存你的代码作为参考:D。如果你不介意的话。你能举一个例子来说明如何获得二进制文件吗bar@MichaelAntonio很高兴能帮上忙,兄弟:)
function getBinary(file){
var xhr = new XMLHttpRequest();
xhr.open("GET", file, false);
xhr.overrideMimeType("text/plain; charset=x-user-defined");
xhr.send(null);
return xhr.responseText;
}
function sendBinary(data, url){
var xhr = new XMLHttpRequest();
xhr.open("POST", url, true);
if (typeof XMLHttpRequest.prototype.sendAsBinary == "function") { // Firefox 3 & 4
var tmp = '';
for (var i = 0; i < data.length; i++) tmp += String.fromCharCode(data.charCodeAt(i) & 0xff);
data = tmp;
}
else { // Chrome 9
// http://javascript0.org/wiki/Portable_sendAsBinary
XMLHttpRequest.prototype.sendAsBinary = function(text){
var data = new ArrayBuffer(text.length);
var ui8a = new Uint8Array(data, 0);
for (var i = 0; i < text.length; i++) ui8a[i] = (text.charCodeAt(i) & 0xff);
var bb = new BlobBuilder(); // doesn't exist in Firefox 4
bb.append(data);
var blob = bb.getBlob();
this.send(blob);
}
}
xhr.sendAsBinary(data);
}
var data = getBinary("My music.mp3");
sendBinary(data,'http://www.tonycuffe.com/mp3/tailtoddle_lo.mp3');