1. 程式人生 > >Ajax處理下載檔案response沒有反應

Ajax處理下載檔案response沒有反應

要實現下載Excel的功能,思路很簡單,後臺servlet根據資料庫的資料生成Excel儲存在指定位置,然後儲存到response的輸入流中,最後將零時的Excel刪除:

....
//省略poi生成Excle的過程
....

response.setHeader("content-type","text/html;charset=UTF-8");
response.addHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName + ".xls", "UTF-8")); 

InputStream in
= null; OutputStream out = null; try { in = new FileInputStream(filePath + "\\" + fileName + ".xls"); int len = 0; byte[] buffer = new byte[1024]; out = response.getOutputStream(); while((len = in.read(buffer)) > 0) { out.write(buffer,0,len); } }catch
(Exception e) { System.out.println("網路連線故障!錯誤資訊:"+e.getMessage()); }finally { if(in != null) { try { out.close(); in.close(); response.flushBuffer(); }catch(Exception e) { throw new RuntimeException(e); } } } fileExcel.delete
();//delete the excel in the end

前臺ajax也很簡單:

    $.ajax({  
        type: "POST",  
        async: false,  
        url: regionURL ,
        success:function(data){
//          alert(data);
        }
    }); 

想法很好,但是現實很殘酷,點了下載按鈕,一點反應都沒!
最後網上查了下,發現問題是ajax請求只是個“字元型”的請求,即請求的內容是以文字型別存放的。檔案的下載是以二進位制形式進行的,雖然可以讀取到返回的response,但只是讀取而已,是無法執行的。
解決方案,不用ajax:

window.location.href=regionURL;

參考