首先,我們來了解一下,什麼是雲服務器:
雲服務器(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下載這一個超鏈接,瀏覽器就會給我們下載到指定的文件。
那麼,我們就實現了從自己的雲服務器,下載自己指定的文件,這一個功能。
本項目完整代碼已經附上,歡迎使用!