Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript HTML重命名下载链接_Javascript_Html_Download - Fatal编程技术网

Javascript HTML重命名下载链接

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

我有这样一个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文件。我不是那个服务器的所有者。
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不确定OP使用的是哪种服务器端技术,但概念是更改响应内容类型,然后传输file@S.Krishna我无法更改源代码。因为服务器不是我的,我认为那是不可能的@我认为这是可能的。也许使用emulate `将链接另存为JavaScription,您可以向我们展示您的下载代码吗?您的后端编码语言/服务器技术是什么?相关的javascript演示:
下载
属性是适合您情况的最佳解决方案。否则,您必须通过服务器代理此文件以添加适当的头文件。@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');