2016-02-18 57 views
0

下載文件我有我一直在尋找了一個多星期試圖獲得一個解決方案,這一個問題,但我不能。我嘗試了很多例子,但沒有成功。如果有人能夠提供幫助,那會很棒。問題在Java

這是我的問題。

我想如下創建Java和JSP之間的接口:

我有一個文件在我的本地網絡上坐着一個共享文件夾。例如:

\ MYSERVER \ TEMP \ myexcelFile.xls

所以,我想要做的是,我在我的JSP頁面jsp的按鈕時,其實你按一下按鈕,我需要它來獲得來自服務器的文件並提示用戶是否在本地打開或保存它,就好像您在下載文件一樣。

我創建了一個按鈕,當它被觸發,其中在不從共享文件夾讀取該文件,然後提示用戶保存在JSP實際進口我的Java文件卡列斯的過程。

這裏要說的是,我有這個過程:

public void getFile(HttpServletRequest request, 
     HttpServletResponse response) throws Exception { 

    String fileName = "file://myserver/temp/myExcelFile.xls"; 
    URL url = new URL(fileName); 

    OutputStream out = null; 

    try { 
     out = new FileOutputStream(url.getFile()); 
     byte[] totalBytes = fileName.getBytes(); 
     out.write(totalBytes); 
    } finally { 

     if (out != null) { 
      out.close(); 
     } 
    } 
所以當有人按下按鈕的JSP

,它調用的程序如下:

所以按照我需要的是一旦按下按鈕,它應該提示我保存這個文件:myExcelFile.xls,這樣你就可以選擇本地路徑到你想要保存的地方。

這就是我想要實現的。

只見數百個例子,做它,沒有工作,因爲我需要。

我遇到的問題是,當我按下按鈕時,它確實提示我保存或打開文件,但該文件始終是損壞的,它總是說該文件不可讀,並提示缺少樣式等等...

我想,我能想到的所有例子,甚至做了很多的研究一下,但沒有我看到的例子幫助。

我想這是一個普遍的提示,所以如果我有一個PDF或HTML文件,我想它能夠提示用戶保存正確的文件。

請指教。

感謝大家想在此作出貢獻誰。

問候,

+0

http://stackoverflow.com/questions/11238479/writing-a-poi-workbook-to-output-stream-is-generating-weird-values –

回答

0

要想從通過servlet的服務器上的文件,下面的代碼片段應該有所幫助。處理通用文件類型的技巧是使用response.setContentType()爲文件設置正確的MIME類型。

public void getFile(HttpServletRequest request, 
    HttpServletResponse response) throws Exception { 

    String fileName = "//myserver/temp/myExcelFile.xls"; 
    String displayName = "myExcelFile.xls"; 

    try(
     FileInputStream fileIn = new FileInputStream(fileName); 
     BufferedInputStream buffIn = new BufferedInputStream(fileIn); 
     ) { 
     // Add logic to detect and change MIME Type 
     response.setContentType("application/vnd.ms-excel"); 
     response.setHeader("Content-disposition","attachment; filename=\"" + displayName + "\""); 

     BufferedOutputStream buffOut = new BufferedOutputStream(response.getOutputStream()); 
     byte[] data = new byte[1024]; 
     int dataSize = 0; 
     while((dataSize = buffIn.read(data)) != -1) { 
      buffOut.write(data, 0, dataSize); 
     } 
     buffOut.flush(); 
    } catch (Exception e) { 
     // Handle or throw exception 
    } 
+0

好了,我測試你的榜樣,第一個事情我意識到,它拋出了一個異常,我看到它與文件位置有關。按照文件名稱,「file://myserver/temp/myExcelFile.xls」; 對服務器可見:「file:/myserver/temp/myExcelFile.xls」;服務器可以看到 – Roland

+0

:「file:/myserver/temp/myExcelFile.xls」;所以它拿出了一個斜線,我試着給現有的添加雙斜槓:就像這個「file:////myserver/temp/myExcelFile.xls」;仍然沒有工作。所以我最終改變了路徑:「\\\\ myserver \\ temp \\ myExcelFile.xls」。這一個工作,沒有例外拋出。 和我得到了一個提示保存該文件。但是當我試圖打開它時,打開了幾分鐘,然後它說:單元格數據太大,並且它生成了一個日誌文件:單元格數據中的HTML錯誤太大: – Roland

+0

並且該文件仍然損壞。當我在瀏覽器中輸入以下內容:file://myserver/temp/myExcelFile.xls時,它打開正常。 – Roland