Angular HTTP GET,从Spring MVC服务器下载文件

3
我将使用Apache Commons IOUtils的复制方法将文件从服务器发送到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 (...) {
        .......
    }

在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){
            ....
        })

当我在客户端下载文件时,无法阅读它。当我用notepad ++打开它时,发现特殊字符已被修改。
例如,当我用Notpad ++打开原始文件时,我会得到像这样的一行: òŽsCJVäl·²HWƒ…;¹(òÈ$ÓÒ«Á‘{S€~9ÎsŠÒogk
当我用notepad ++打开下载后的文件时,同样的一行变成了: ��sCJV�l��HW��;�(��$�Ӂҫ��{S�~9�s��ogk
然而,当我直接在浏览器中放置下载链接(localhost/myApplication/download)时,它可以正常工作。文件应该是加密的,需要授权才能下载文件,因此我必须使用angular HTTP get。
任何帮助都将不胜感激。

在读取文件时,请使用适当的编码(可能UTF-8可行)。 - Utkarsh
请尝试使用二进制编辑器检查内容。 - suztomo
我使用Hex Editor Neo检查了内容。它不是相同的二进制内容。 - Bilal BBB
你看到有任何特定的字符被删除了吗? - suztomo
谢谢,感谢您的帮助 :) - Bilal BBB
显示剩余2条评论
1个回答

5

我必须在HTTP GET请求中添加responseType:

$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){
        ....
    })

现在它正在运行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接