angular http get,从spring mvc server下载文件

Bil*_*BBB 3 spring-mvc angularjs

我正在使用apache commons IOUtils copy方法将文件从服务器发送到angularjs.这是我的控制器:

    @RequestMapping(value="/download", method = RequestMethod.GET)
    public void downloadFile(HttpServletResponse response) {

        response.setContentType("image/jpg");

        try {
            File file = new File(filePath);

            InputStream inputStream = new FileInputStream(file);
            IOUtils.copy(inputStream, response.getOutputStream());

        } catch (...) {
        .......
    }
Run Code Online (Sandbox Code Playgroud)

在angularJs控制器中:

$http({

            method: 'GET',
            url: '.../download',
            headers: {'Content-Type': 'image/jpg'}

        })

        .success(function(data, status){

            console.log(data);
            var blob = new Blob([data], {type: 'image/jpg'});
            saveAs(blob, 'test.jpg');
        })

        .error(function(data, status){
            ....
        })
Run Code Online (Sandbox Code Playgroud)

当我在客户端下载文件时,我无法读取它.当我用notepad ++打开它时,我发现特殊字符被修改了.

例如,当我用Notpad ++打开原始文件时,我得到一条这样的一行:òssCJVäl·²HWƒ...;¹(òÈ$ÓÒ«ÁÂ'{ S€~9ÎsŠÒogk

当我用notepad ++打开下载的文件时,同一行变为: sCJV l HW ; ( $ Ӂҫ { S?~9 s ogk

但是,当我将下载链接(localhost/myApplication/download)直接放在浏览器中时,它可以正常工作.文件应该是加密的,下载文件需要授权,所以我必须使用角度HTTP get.

任何帮助,将不胜感激.

Bil*_*BBB 5

我不得不将responseType添加到HTTP get请求:

$http({

        method: 'GET',
        url: '.../download',
        responseType: 'arraybuffer'
    })

    .success(function(data, status){

        console.log(data);
        var blob = new Blob([data], {type: 'image/jpg'});
        saveAs(blob, 'test.jpg');
    })

    .error(function(data, status){
        ....
    })
Run Code Online (Sandbox Code Playgroud)

现在它正在运作.