2013-10-05 63 views
0

現狀:我試圖創建一個JSF app(門戶),它應該包含鏈接到Excel存儲映射爲所有用戶的公共網絡驅動器G:上的文件(xlsxlt)在我們公司。主要目標是統一對這些文件的訪問權限,並將工作保存到用戶在G驅動器上的某處搜索報告。我希望這很清楚..?JSF應用程序:打開文件,而不是下載

我正在使用以下servlet來打開文件。問題是,它不只是開了,但通過瀏覽器下載,並在此之後,打開:

@WebServlet(name="fileHandler", urlPatterns={"/fileHandler/*"}) 
public class FileServlet extends HttpServlet 
{ 
    private static final int DEFAULT_BUFFER_SIZE = 10240; // 10KB. 
    private String filePath; 

    public void init() throws ServletException { 
    this.filePath = "c:\\Export"; 
    System.out.println("fileServlet initialized: " + this.filePath); 
    } 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    { 
    String requestedFile = request.getPathInfo(); 
    File file = new File(filePath, URLDecoder.decode(requestedFile, "UTF-8")); 
    String contentType = getServletContext().getMimeType(file.getName()); 

    response.reset(); 
    response.setBufferSize(DEFAULT_BUFFER_SIZE); 
    response.setContentType(contentType); 
    response.setHeader("Content-Length", String.valueOf(file.length())); 
    response.setHeader("Content-Disposition", "attachment; filename=\"" + file.getName() + "\""); 

    BufferedInputStream input = null; 
    BufferedOutputStream output = null; 

    try { 
     input = new BufferedInputStream(new FileInputStream(file), DEFAULT_BUFFER_SIZE); 
     output = new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE); 

     byte[] buffer = new byte[DEFAULT_BUFFER_SIZE]; 
     int length; 

     while ((length = input.read(buffer)) > 0) { 
     output.write(buffer, 0, length); 
     } 
    } finally { 
     close(output); 
     close(input); 
    } 
    } 

    private static void close(Closeable resource) { 
    if (resource != null) resource.close(); 
    } 
} 

如何剛剛啓動相應的應用程序(如ExcelWord等),點擊鏈接(絕對文件路徑)並在其原始位置打開文件?

更新:我試圖使用<a>標籤:

<a href="/G:/file.xls">File</a> // various "/" "\" "\\" combinations 
<a href="file:///G:/file.xls">File</a> 

但它不工作:

type Status report 
message /G:/file.xls 
description The requested resource is not available. 
+0

您無法在遠程Web服務器上打開文件,就像它在本地計算機上一樣。如果服務器是本地機器,那麼使用'file://'URL。從瀏覽器打開文件,複製並粘貼地址欄中的網址,然後將其粘貼到鏈接的「href」屬性中。 –

+0

謝謝。它從共享的G:驅動器打開,這對服務器和域中的用戶都是相同的。我已經嘗試了你的建議,但我不知道如何。此路徑在瀏覽器中工作'file:/// G:/ test.pdf',但不是這樣:'file' – gaffcz

+0

它從'html'文件,但不是來自JSF應用程序:( – gaffcz

回答

3

文件URL被大多數瀏覽器視爲安全隱患,因爲它們導致文件通過網頁在客戶機的機器上打開,而最終用戶不知道它。如果你真的想這樣做,你必須配置瀏覽器來允許它。

查看wikipedia article的解決方案。

相關問題