web文件下載(附方案及源碼配置)

1. 場景描述

因項目需查詢數據量比較大(須要查詢Hbase等nosql數據庫),採用用戶點擊查詢後,後臺查詢並生成查詢文件;而後消息通知用戶後,用戶點擊下載的方式來知足用戶需求。html

2. 解決方案

Web容器用的Tomcat,擬採用tomcat提供文件下載功能。前端

2.1 開啓虛擬目錄與路徑映射(不建議)

需修改tomcat下的web.xm和server.xml文件web

2.1.1 開啓虛擬目錄

修改web.xmlsql

<init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
</init-param>
        
-------------------修改成:-----------
<init-param>
            <param-name>listings</param-name>
            <param-value>true</param-value>
</init-param>
2.1.2 開啓路徑映射

修改server.xml數據庫

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true" deployOnStartup="true">
        <Context path="" docBase="laowang" debug="0" reloadable="true"/>
      </Host>
     
      ------------新加一個<Context>----------------
          <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true" deployOnStartup="true">
        <Context path="" docBase="laowang" debug="0" reloadable="true"/>
        <Context path="/test" docBase="/home/laowang/test" debug="0" privileged="true"></Context>
      </Host>

其中:path中的 "/test"爲請求訪問路徑;/home/laowang/test爲文件存在服務器的實際路徑。apache

2.1.3 效果tomcat

在這裏插入圖片描述

2.1.4 存在不足

web中listings的 含義是Directory Listing(虛擬目錄),默認false實際上是處於安全考慮的,修改成true實際上是不安全的,不建議的。安全

2.2 將文件放置到ROOT下(不建議)

2.2.1 說明

直接將文件放置到目錄:apache-tomcat-8.0.53/webapps/ROOT,由於tomcat自己提供的就是web服務,能夠直接訪問,不用修改任何東西。服務器

2.2.2 效果

在這裏插入圖片描述

2.2.3 存在不足

ROOT目錄,從新打包的時候,文件會丟失的,只能用於臨時文件還能夠,與項目需求不符合。app

2.3 只開啓路徑映射及相關配置(建議)

2.3.1 開啓路徑映射
<Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="true" deployOnStartup="true">
    <Context path="" docBase="laowang" debug="0" reloadable="true"/>
  </Host>
 
  ------------新加一個<Context>----------------
      <Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="true" deployOnStartup="true">
    <Context path="" docBase="laowang" debug="0" reloadable="true"/>
    <Context path="/test" docBase="/home/laowang/test" debug="0"                        privileged="true"></Context>
  </Host>
2.3.2 效果

(1)因未開啓虛擬路徑服務,因此不能訪問其餘文件。

在這裏插入圖片描述

(2)只有文件名稱徹底對的上,才能訪問。

在這裏插入圖片描述

2.3.3 存在問題及解決方案

你們經過截圖可能也發現了,文件是直接打開的,而並非下載到本地,項目需求是要下載到本地打開的。

有兩個方式解決

(1)第一個是在打開的文件右鍵-》另存爲就能夠下載,可是這樣太不不方便。

(2)結合前端html使用a標籤,點擊後直接下載。(推薦)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<a href="http://10.192.168.11:9108/test/test.txt" download="test.txt">download</a>
</body>
</html>

效果圖,點擊後就直接下載到默認目錄了。

在這裏插入圖片描述

相關文章
相關標籤/搜索