Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.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 无法使用Angular JS和spring MVC打开下载文件_Javascript_Java_Angularjs_Excel_Spring - Fatal编程技术网

Javascript 无法使用Angular JS和spring MVC打开下载文件

Javascript 无法使用Angular JS和spring MVC打开下载文件,javascript,java,angularjs,excel,spring,Javascript,Java,Angularjs,Excel,Spring,我正在我的网站上实现一个功能,并使用Angular JS。我已经在服务器端实现了导出文件的服务。在客户端,我创建了一个“导出选项”,当用户单击该按钮时,用户可以下载文件(从服务器端的我的服务导出)并自动将其保存在本地计算机的下载文件夹中。我从这个问题的答案“tremendows”中得到了这个想法: 一切都做得很好,但是,当我打开保存到下载文件夹中的文件时,显示了一条错误消息:“Excel无法打开文件“filename.xlsx”,因为文件扩展名的文件格式无效。验证文件是否已损坏,以及文件扩展名

我正在我的网站上实现一个功能,并使用Angular JS。我已经在服务器端实现了导出文件的服务。在客户端,我创建了一个“导出选项”,当用户单击该按钮时,用户可以下载文件(从服务器端的我的服务导出)并自动将其保存在本地计算机的下载文件夹中。我从这个问题的答案“tremendows”中得到了这个想法:

一切都做得很好,但是,当我打开保存到下载文件夹中的文件时,显示了一条错误消息:“Excel无法打开文件“filename.xlsx”,因为文件扩展名的文件格式无效。验证文件是否已损坏,以及文件扩展名是否与文件格式匹配

我相信问题来自客户端,因为当我在服务端运行服务(用于导出文件)时,文件被正确创建和打开,没有任何错误。我一直在调查问题,然后我发现问题应该来自文件路径“.xlsx”

以下是用于在服务器端导出文件的java代码:

@RequestMapping(value = "/exportFile", method = RequestMethod.GET)
public String exportHRSalaryByAcc(HttpServletRequest request, HttpServletResponse response,
        @RequestParam(value = "month", defaultValue = "") String month) throws IOException, GeneralSecurityException, InvalidFormatException{
    String rs = FALSE;
    response.addHeader("Access-Control-Allow-Origin", "*");
    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    //response.setContentType("application/x-felix; charset=us-ascii");
    response.setHeader("Content-Transfer-Encoding", "7bit");

    String fName = null;

    Calendar cal = Calendar.getInstance();
    int m = 0;
    try {
        if(StringUtils.isNotEmpty(String.valueOf( month))  || StringUtils.isNotEmpty(String.valueOf( year))){
            if (DateUtils.isValidFormatver2(Integer.parseInt(month), Integer.parseInt(year))) {
                    m = Integer.parseInt(month);
                    fName = "C:\\LOCAL\\FILE_" + "[" + m + "]" + "[" + y + "]" + ".xlsx";
                    // CREAT FILE
                    rs = eService.runExportDataHRSalay(m, fName);
            }  else {
                return ErrorMessage.FILE_MESS;
            }
        } else {
            m = cal.get(Calendar.MONTH) + 1;
            fName = "C:\\LOCAL\\FILE_" + "[" + m + "]" +  ".xlsx";
            rs = eService.runExportDataHRSalay(m, fName);
        }
    } catch (Exception e) {
        e.printStackTrace();

    }
    response.setHeader("Content-Disposition", "attachment; filename=\"" + fName);
    return rs;
}
以下是客户端的代码,我使用了angularjs:

      .....
      month = currentTime.getMonth() + 1;
      var check = confirm("Are you sure to run the data ?");    
                    if(check == true){
                        $http({
                            url : www.serviceFromServerSide.abc/exportFile,
                            method : 'GET',
                            headers : {
                                'Content-type' : 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
                            },
                            responseType : 'arraybuffer'
                       }).success(function(data, status, headers, config) {
                            var file = new Blob([ data ], {
                                type : 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'

                            });
                            //trick to download store a file having its URL
                            var fileURL = URL.createObjectURL(file);
                            var a         = document.createElement('a');
                            a.href        = fileURL; 
                            console.dir(fileURL);
                            a.target      = '_blank';
                            a.download    = 'FILE__' + '[' + month + ']'+ '.xlsx';
                            document.body.appendChild(a);
                            a.click();
                            $("#loadingImage").css("display", "none");
                            $("#backgroundPopup").fadeOut(400);
                       }).error(function(data, status, headers, config) {
                       });
                    }else{}..........

请帮我解决这个问题,因为这个我真的很累。谢谢大家,很抱歉解释得不好。

我也有同样的问题,我用.xls替换了.xlsx,基本上:

addHeader(“内容处置”、“附件”; 文件名=report.xls”)

在代码处,替换这一行代码:

fName = "C:\\LOCAL\\FILE_" + "[" + m + "]" + "[" + y + "]" + ".xlsx";
与:

fName = "C:\\LOCAL\\FILE_" + "[" + m + "]" + "[" + y + "]" + ".xls";