後臺使用SpringMVC 的 ResponseEntity<byte[]> 參數返回類型,前臺使用AngularJs請求。代碼如下
後臺代碼:
@RequestMapping("/down")
@ResponseBody
public ResponseEntity<byte[]> expoertExcel(..) throws IOException{
...
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), httpheaders, HttpStatus.CREATED);
}
前臺angularJs接受方式有兩種,一種是可以預先設置下載文件的名稱,一種是不設置的。但是兩種方法都是使用的存儲二進制對象blob來實現下載的
第一種模擬連接觸發(可以設置下載的文件名稱):
$http({
method : 'POST',
url : url,
data : data,
headers : {
'Content-type' : 'application/json;charset=UTF-8'
},
responseType: 'arraybuffer',
transformRequest : function(obj) {
return JSON.stringify(obj);
}
}).success(function (data) {
//type對應着所需要下載的文件類型
var blob = new Blob([data], {type: "application/vnd.ms-excel"});
var objectUrl = URL.createObjectURL(blob);
var a = document.createElement('a');
document.body.appendChild(a);
a.setAttribute('style', 'display:none');
a.setAttribute('href', objectUrl);
//下載的文件名稱
var filename="Excel.xls";
a.set`Attribute('download', filename);
a.click();
URL.revokeObjectURL(objectUrl);
}).error(function (data) {
....
});
第二種方式:
$http({...}).success(function (data) {
var blob = new Blob([data], {type: "application/vnd.ms-excel"});
var fileUrl = URL.createObjectURL(blob);
window.open(fileUrl);
})