把服務器當網盤玩 教你從雲服務器下載自己的文件

首先,我們來了解一下,什麼是雲服務器:

雲服務器(Elastic Compute Service, ECS)是一種簡單高效、安全可靠、處理能力可彈性伸縮的計算服務。其管理方式比物理服務器更簡單高效。用戶無需提前購買硬件,即可迅速創建或釋放任意多臺雲服務器。

雲服務器幫助您快速構建更穩定、安全的應用,降低開發運維的難度和整體IT成本,使您能夠更專注於核心業務的創新。

接着,網盤大家就不陌生了吧?網盤就是可以存放數據的虛擬盤。網盤定義是這樣的:

網盤,又稱網絡U盤、網絡硬盤,是由互聯網公司推出的在線存儲服務。服務器機房爲用戶劃分一定的磁盤空間,爲用戶免費或收費提供文件的存儲、訪問、備份、共享等文件管理等功能,並且擁有高級的世界各地的容災備份。用戶可以把網盤看成一個放在網絡上的硬盤或U盤,不管你是在家中、單位或其它任何地方,只要你連接到因特網,你就可以管理、編輯網盤裏的文件。不需要隨身攜帶,更不怕丟失。

對於我們學生而言,雲服務器的價格還是比較低廉的。獲取很多小夥伴都已經接觸過雲服務器,那麼我們買了雲服務器之後,能做一些什麼呢?

搭建自己的博客就不說了,我們還可以部署自己寫的項目到雲服務器,然後外網就可以訪問到我們的項目了。

接下來我們介紹一個新玩法——把服務器當網盤玩,即從自己的雲服務器下載指定的文件

哈哈哈花裏胡哨 ,也算是最近我在研究的事情吧。


一:編寫項目前臺

 

在前臺的JSP頁面,我們只需要一行代碼,就可以實現超鏈接下載

<a href="file">mysql下載</a>

接着是web.xml部署配置文件:

<servlet>
   <servlet-name>FileServlet</servlet-name>
   <servlet-class>ypc.zwz.controller.FileDownController</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>FileServlet</servlet-name>
  <url-pattern>/file</url-pattern>
</servlet-mapping>

<filter>
  <filter-name>encodefilter</filter-name>
  <filter-class>ypc.zwz.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>encodefilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

前臺JSP頁面的超鏈接‘file’,被servlet這個服務器連接器所映射,對應到FileServlet這個servlet,然後到了ypc.zwz.controller.FileDownController這個Java文件中,進行後臺的邏輯處理。(上方前8行代碼)

encodefilter文字編碼過濾器,使用他可以保證中文正常顯示。

最後的welcome-file-list就是首頁,即運行項目就打開的頁面。

 


二:後臺邏輯編寫

首先是文字過濾器

package ypc.zwz.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class EncodingFilter implements Filter {

	public void destroy() {
	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		chain.doFilter(request, response);
	}

	public void init(FilterConfig filterConfig) throws ServletException {
	}

}

重點是文件下載的JAVA類

package ypc.zwz.controller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

public class FileDownController extends HttpServlet{

	private static final long serialVersionUID = 1L;
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
        this.doPost(request, response);
	}
	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.download(request, response);
	}
	
	public void download( HttpServletRequest request, HttpServletResponse response) {
        try {
            String path = "C://mysql-5.5.27-win32.msi";
            downCfg(System.currentTimeMillis()+".msi", request, response);
            OutputStream out;
            FileInputStream inputStream = new FileInputStream(path);
            out = response.getOutputStream();
            byte[] buffer = new byte[1024];
            int len;
            while ((len = inputStream.read(buffer)) != -1) {
                out.write(buffer, 0, len);
            }
            inputStream.close();
            out.close();
            out.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    private void downCfg(String fileName, HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {
        String userAgent = request.getHeader("User-Agent");
        if (userAgent.contains("MSIE") || userAgent.contains("Trident")) { //IE或者以IE爲內核的瀏覽器
            fileName = URLEncoder.encode(fileName, "UTF-8");
        } else {//非IE瀏覽器
            fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
        }
        response.setHeader("Content-disposition", String.format("attachment; filename=\"%s\"", fileName));
        response.setContentType("application/octet-stream;charset=utf-8");
        response.setCharacterEncoding("UTF-8");
    }
}

當我們在前臺JSP頁面讀到ypc.zwz.controller.FileDownController這個Java文件,會運行doGet()方法,其中doGet()又調用了doPost()方法,doPost()方法又調用了download()方法。

我們只需要更改path這一個String變量即可,即你需要下載的文件,在你雲服務器上的路徑即可,比如我選擇的是mysql的安裝包。


 

三:部署至服務器

項目編寫好之後,我們需要配置一下Tomcat,我這裏以eclipse爲例,其他IDE同理,找到Tomcat打開設置即可。

如果上面第二步是灰的(無法更改),我們只需要停止正在運行的Tomcat,清除掉加進去的項目(右擊Tomcat,選擇Add and Remove),就變成可以更改的狀態。

爲什麼要修改呢?因爲部分IDE默認是在工作目錄下的Servers目錄下進行部署的,而我們需要把項目部署在Tomcat目錄下的webapps下,所以需要更改。

我們先使用IDE啓動一次項目,即把項目部署到Tomcat的webapp目錄下,然後打開Tomcat目錄下的bin文件夾,打開Tomcat85w.exe(不同版本文件名不同),啓動。

接着在雲服務器上跑一下

接下來,我們在外網瀏覽器輸入服務器公網IP + 項目名

我們點擊mysql下載這一個超鏈接,瀏覽器就會給我們下載到指定的文件。

那麼,我們就實現了從自己的雲服務器,下載自己指定的文件,這一個功能。

本項目完整代碼已經附上,歡迎使用!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章