1. 程式人生 > >隱藏form表單下載檔案

隱藏form表單下載檔案

下載檔案操作

java contorller程式碼

@RequestMapping ("/downloadZIPFile")
    @ResponseBody
    public void downloadZIPFile (HttpServletRequest request, HttpServletResponse response)
    {
        InputStream in = null;
        OutputStream out = null;
        try
        {
            request.setCharacterEncoding ("utf-8");
            String filePath = request.getParameter ("filePath");//獲得檔案路徑
            String fileName = request.getParameter ("fileName");//獲得要下載的檔名
            File file = new File (filePath);
            response.setHeader ("Content-type", "text/html;charset=UTF-8");
            response.setCharacterEncoding ("utf-8");//設定編碼集,檔名不會發生中文亂碼
            response.setHeader ("Content-Disposition", "attachment;filename=" + fileName);
            in = new FileInputStream (file);
            out = response.getOutputStream ();
            byte[] buffer = new byte[1024];
            int len = 0;
            while ((len = in.read (buffer)) > 0)
            {
                out.write (buffer, 0, len);
            }
        }
        catch (Exception e)
        {
            if (e instanceof IOException)
            {
                e.printStackTrace ();
                _logger.error ("檔案下載發生異常!", e);
            }
            else if (e instanceof UnsupportedEncodingException)
            {
                e.printStackTrace ();
                _logger.error ("設定編碼格式發生異常!", e);
            }
            else
            {
                e.printStackTrace ();
                _logger.error ("檔案下載發生異常!", e);
            }
        }
        finally
        {
            try
            {
                in.close ();
                out.flush ();
                out.close ();
            }
            catch (IOException e)
            {
                e.printStackTrace ();
            }
        }
    }

js程式碼

//我這是點選datagrid的某一行,先生成檔案,再下載檔案的,所以有了檔名與路徑;
function downloadFile(actoinURL,filePath,fileName){
var form = $("<form>");   
	$('body').append(form);  
        form.attr('style','display:none');   
        form.attr('target','');
        form.attr('method','post');
        form.attr('action',actoinURL);//下載檔案的請求路徑
        
        
        var input1 = $('<input>'); 
        input1.attr('type','hidden'); 
        input1.attr('name','filePath'); 
        input1.attr('value',filePath);
        form.append(input1);  
        var input2 = $('<input>'); 
        input2.attr('type','hidden'); 
        input2.attr('name','fileName'); 
        input2.attr('value',fileName);
        form.append(input2);
        
        form.submit();    
	
	};

對了,我在網上查過,說是ajax不能做下載檔案操作!

ajax不能實現檔案下載的原因:

那是因為response原因,一般請求瀏覽器是會處理伺服器輸出的response,例如生成png、檔案下載等,然而ajax請求只是個“字元型”的請求,即請求的內容是以文字型別存放的。檔案的下載是以二進位制形式進行的,雖然可以讀取到返回的response,但只是讀取而已,是無法執行的,說白點就是js無法呼叫到瀏覽器的下載處理機制和程式。