2017-07-28 80 views
0

角JS代码下载Excel文件:如何采用了棱角分明的js和REST API

$scope.getExcelDownload = function(index,basketid,brokerid,tradeDate,serverid,transid) {    
    var myformid = 'ExcelForm' + index; 
    ExcelDownload.get({brokerid : brokerid,basketName : basketid,appl : 'abc',param : 'excel',tradedate:tradeDate,transactionID:transid,serverid:serverid},function(data, headers){ 
     alert("Success"); 
     var response = {}; 
     response.data = data; 
     response.headers = headers(); 


     var blob = new Blob([response.data], {type: "application/octet-stream;base64"}); 
     var objectUrl = URL.createObjectURL(blob); 
      window.open(objectUrl); 
      saveAs(blob, "myfile.xls"); 
    },function(errResponse) { 
     alert("failure"); 

    }); 

} 

REST WEBSERVICE

@RequestMapping(value = "/getexcel/{brokerid}/{basketName}/{appl}/{param}/{tradedate}/{transactionID}/{serverid}", produces = { MediaType.APPLICATION_OCTET_STREAM_VALUE }, method = RequestMethod.GET) 
    public @ResponseBody ResponseEntity<byte[]> getFile(@PathVariable("brokerid") String brokerid,@PathVariable("basketName") String basketName,@PathVariable("appl") String appl,@PathVariable("param") String param,@PathVariable("tradedate") String tradedate,@PathVariable("transactionID") String transactionID,@PathVariable("serverid") String serverid){ 
     ResponseEntity respEntity = null; 
     OrdersDownload orders = new OrdersDownload(); 

     if(param.equalsIgnoreCase(EXCEL_OPTION)){ 
      log.finest("[email protected] selected option :" + param); 
      byte[] reportBytes = orderDownloadService.doGet(brokerid, basketName, appl, param, tradedate, transactionID, serverid); 

      HttpHeaders responseHeaders = new HttpHeaders(); 
      responseHeaders.add("Content-Disposition", String.valueOf(String 
        .valueOf((new StringBuffer("attachment; filename=\"")) 
          .append(
            StringUtils 
            .replace(basketName, ":", "")) 
            .append("_orders.xls\"")))); 
      responseHeaders.add("Content-Type",MediaType.APPLICATION_OCTET_STREAM_VALUE); 

      //return reportBytes; 

      respEntity = new ResponseEntity<byte[]>(reportBytes, responseHeaders,HttpStatus.OK); 
      return respEntity; 
     } 

     return null; 
    } 

响应: 文件是越来越下载不contnet它只是在文件内部打印[object,object]

回答

0

下面的作品对我来说...

// Download excel template file 
    $scope.downloadExcelTemplate = function() { 
    CustomerService.downloadTemplate().then(function (response) { 
     var linkElement = document.createElement('a'); 

     try { 

     var fileName = response.headers('content-name'); 
     var blob = new Blob([response.data], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}); 
     var url = window.URL.createObjectURL(blob); 

     linkElement.setAttribute('href', url); 
     linkElement.setAttribute("download", fileName); 

     var clickEvent = new MouseEvent("click", { 
      "view": window, 
      "bubbles": true, 
      "cancelable": false 
     }); 
     linkElement.dispatchEvent(clickEvent); 
     } catch (ex) { 
     } 

    }, function (response) { 
     toastr[messageTypes.ERROR]('Something went wrong.'); 
     $scope.clearForm(); 
     $('#cl-modal-box').modal('hide'); 
    }); 

    } 

PHP函数用来处理该请求

public function downloadTemplateAction() { 

     $customer = new Customer(); 

     $fileName = 'customer_import_template.xlsx'; 
     $uploadDir = $customer->getDownloadRootDir(); 
     $filePath = $uploadDir . '/' . $fileName; 

     // Create phpexcel object to read the excel file 
     $objPHPExcel = \PHPExcel_IOFactory::load($filePath); 
     // Define writer object for Excel2007 || 2010 
     $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007"); 

     // Set header params 
     header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=UTF-8'); 
//  header('Content-type: application/vnd.ms-excel; charset=UTF-8'); 
     header('Content-Disposition: attachment;filename=' . $fileName); 
     header('Cache-Control: max-age=0'); 
     header('Content-Name: ' . $fileName); 

     $objWriter->save('php://output'); 
     exit(); 
    } 
+0

你在你的回应有什么样的数据? – jinal

+0

我发送Excel文件的路径作为回应,我必须下载。我已经更新我的答案与后端发送数据作为回应 –

+0

嗨,作为回复休息api我越来越follwoing数据ÐÏࡱ±;þÿ\tþÿÿÿ条目 工作簿è\tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ这是不可读 – jinal