27644

[code]

    @RequestMapping(value = "/download", method = RequestMethod.GET)
    public ResponseEntity<byte[]> download() throws IOException {
        HttpHeaders h = new HttpHeaders();
        h.add("Content-Type", "text/csv; charset=MS932");
        h.setContentDispositionFormData("filename", "hoge.csv");
        return new ResponseEntity<>("あ,い,う,え,お".getBytes("MS932"), h, HttpStatus.OK);
    }
    
[/code]

<http://blog.okazuki.jp/entry/2015/07/18/220959>  
上記サイト様を見ますと、これでCSVファイルをダウンロードできるようにうかがえますが、  
new ResponseEntity<>("あ,い,う,え,お".getBytes("MS932"), h, HttpStatus.OK)  
上記の時点で、"あ,い,う,え,お"を書き込んだ"hoge.csv"というファイルをローカル（Windowsのダウンロードディレクトリなど）  
にダウンロードするということなのでしょうか。

試しに上記をjavascriptで呼んでみたのですが、  
結果ブラウザに"あ,い,う,え,お"と表示されるのみとなりました。  
CSVファイルなどをローカルにダウンロードする場合どのようにすべきなのでしょうか。

javascript側

[code]

      $.ajax({
            type:"post",
            url:"/download",
            contentType: 'application/json',
            dataType: "html"
        }).done(function(responseData, status, jqXHR) {
        }).fail(function(responseError, status, errorThrown) {
        });
    
[/code]


CC BY-SA 3.0
2016-07-13T06:49:48.923
27594
2016-07-15T06:13:55.397
12842
question
javascript java spring-boot
CSVファイルをダウンロードしたい


ファイルがダウンロードできるかどうか確認したい、ということであれば、Webブラウザで  
<http://localhost:8080/download> (※デフォルト設定の場合)  
へアクセスすれば良いです。

Javascriptを利用してダウンロードしたい、ということであれば、例えば

  * [javascript - JavaScriptからファイルをダウンロードさせるのはどうしたら良いですか？ - スタック・オーバーフロー](https://ja.stackoverflow.com/a/302/2808)

に書かれているような形で可能でしょう。

[code]

    var xhr = new XMLHttpRequest();
    xhr.open('GET', '/download', true);
    xhr.responseType = 'arraybuffer';
    xhr.onload = function(e) {
        var blob = new Blob([this.response]);
        var url = window.URL || window.webkitURL;
        var blobURL = url.createObjectURL(blob);
    
        var a = document.createElement('a');
        a.download = "hoge.csv";
        a.href = blobURL;
        a.click();  
    };
    
    xhr.send();
    
[/code]

その他参考:

  * [Javascript to csv export encoding issue - Stack Overflow](https://stackoverflow.com/q/19492846/4506703)
  * [バイナリファイルをAjaxで取得する際に注意する点 - Qiita](http://qiita.com/tom_konda/items/484955b8332e0305ebc4)


CC BY-SA 3.0
2016-07-15T05:16:17.210
27644
2016-07-15T06:10:41.177
2017-05-23T12:38:56.083
-1
2808
27594
answer


Javascript側が、表示するような形でしか処理をしていないからではないでしょうか？取得が出来ているのであれば、Data URI
schemeに変換して、そこにページ遷移するような処理にすればダウンロードできるかと思います。  
blobに変換する手法などもありますが、こちらはブラウザ次第で動かないことが多いです。

<https://ja.wikipedia.org/wiki/Data_URI_scheme>

[code]

    function make_downloadlink(){
      var data = "1,2,3,4,5";  
      var edata = encodeURIComponent(data);
      var uri = 'data:text/csv;charset=utf-8,' + data;
      var a = document.createElement("a");
      a.setAttribute("href",uri);
      a.setAttribute("download","sample.csv");
      a.innerHTML ='Download';
      document.getElementById("button").appendChild(a);
    }
    
    make_downloadlink();
[/code]

[code]

    <div id="button"></div>
[/code]


CC BY-SA 3.0
2016-07-15T06:07:15.503
27645
2016-07-15T06:13:55.397
2016-07-15T06:13:55.397
8667
8667
27594
answer