32492


現在以下の様な手段を使ってサーバからファイルをダウンロードしているのですが、  
ファイル名が指定したものになりません、原因が分かる方いますでしょうか？

[code]

    var a = document.createElement('a');
    a.download = 'test.xml';
    a.href = 'http/XXX/XXX/user?id=1234';
    a.click(); 
    
[/code]

サーバー側はnode.jsで作成されていてurlで指定されたものをデータベースにアクセスして取得してくれるようになっています。

この時ダウンロードされたファイルの内容などは正しいのですが、ファイル名だけが指定したものになってくれません、、、どうしてでしょうか？


CC BY-SA 3.0
2017-02-08T05:01:27.877
32487
2017-02-08T09:32:25.177
2017-02-08T06:18:18.583
20198
question
javascript node.js
javascriptファイルダウンロード時のファイル名の指定について


[caniuseのDownload attribute](http://caniuse.com/#feat=download)によると

  * Internet Explorer 11
  * Safari 10
  * iOS Safari 10.2
  * Opera Mini

は`download`属性に未対応です。


CC BY-SA 3.0
2017-02-08T06:32:19.833
32491
2017-02-08T06:32:19.833
4236
32487
answer


クロスドメインの問題はありますが、受付先で許可して、こうすれば取得できますね。  
既に回答がありますが、対応ブラウザもご確認ください。

[code]

    window.URL = window.URL || window.webkitURL;
    
    function work(){
        var val1 = document.getElementById('url').value;
        var val2 = document.getElementById('name').value;
        downloadXML(val1, val2);
    }
    
    /**
     * @param url       String
     * @param filename  String
     **/
    function downloadXML(url, filename){
        var xhr = new XMLHttpRequest(),
              a = document.createElement('a'), file;
        
        xhr.open('GET', url, true);
        xhr.responseType = 'blob';
        xhr.onload = function () {
            file = new Blob([this.response], { type : 'application/octet-stream' });
            a.href = window.URL.createObjectURL(file);
            a.download = filename;
            a.click();
        };
        xhr.send();
    }
[/code]

[code]

    <input type="text" id="url" placeholder="ダウンロード対象のURL" />
    <input type="text" id="name" placeholder="保存するファイル名" />
    <button onclick="work()">download</download>
[/code]


CC BY-SA 3.0
2017-02-08T06:49:37.737
32492
2017-02-08T06:49:37.737
32487
answer