今天給你們分享的是分佈式系統圖片上傳方案,若有不足,敬請指正。java
咱們都知道在咱們開發中,常常要用到圖片上傳功能。那麼在傳統的上傳方式中,咱們是在項目的根目錄下建立upload目錄,將圖片上傳到服務器中。那麼在分佈式環境下,是有多個Tomcat存在的,當把圖片直接上傳到Tomcat服務器時,容易出現圖片丟失的問題。node
傳統方式 |
---|
![]() |
那麼怎麼解決這個問題呢?咱們會不會有這樣的想法:直接將圖片上傳到一個指定的目錄,訪問、下載圖片都訪問這個目錄就行了。以下圖: |
圖示 |
---|
![]() |
因爲項目最終是要部署到Linux環境,因此直接將圖片上傳到Linux服務器linux
這就須要使用vsftpd組件,實現文件傳輸web
ftp(File Transfer Protocol)文件傳輸協議。(實現不一樣操做系統之間文件的傳輸)數據庫
vsftpd是一個基於ftp協議的文件傳輸服務器軟件apache
使用方法vim
圖示 |
---|
![]() |
被動模式 |
---|
![]() |
主動模式 |
---|
![]() |
圖示 |
---|
![]() |
再次訪問瀏覽器,發現能夠正常鏈接了瀏覽器
前提:在maven中添加ftp服務的依賴安全
<dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> </dependency>
package com.xkt.base.test; import java.io.File; import java.io.FileInputStream; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; /** * 測試文件上傳 * * @author lzx * */ public class TestFtp { public static void main(String[] args) { try { // 1.建立ftp客戶端 FTPClient client = new FTPClient(); // 2.鏈接服務器 client.connect("192.168.109.3", 21); // 3.登陸,認證身份 boolean flag = client.login("ftpuser", "ftpuser"); if (flag) { /* * 4.指定圖片上傳的目錄,默認路徑在ftpuser的家目錄下 * * 確保ftpuser用戶有這個目錄下的寫權限 * * 在Linux上用ftpuser這個用戶,去建立這個目錄 * */ client.changeWorkingDirectory("/home/ftpuser/ego/images"); // 5.指定上傳爲被動上傳,由於:不少的客戶端禁止主動模式 client.enterLocalPassiveMode(); // 6.指定文件上傳的方式爲二進制,即便用字節流 client.setFileType(FTP.BINARY_FILE_TYPE); // 7.上傳 File pic = new File("F:/圖片/3.jpg"); boolean result = client.storeFile(System.currentTimeMillis() + ".jpg", new FileInputStream(pic)); if (result) { System.out.println("上傳成功"); } else { System.out.println("上傳失敗"); } } client.disconnect(); } catch (Exception e) { e.printStackTrace(); } } }
那麼問題來了,在訪問瀏覽器過程當中你們是否發現圖片加載時間稍微有點長呢?並且這還只是一張圖片,那麼在咱們實際開發中遇到的相似某寶,某貓,某東這種大型網站每一個頁面須要加載的圖片更多,並且對併發量的要求也很高又該怎麼解決呢?這就須要用到Tengine了,關於它的介紹咱們將在後面的文章中給出。服務器
版權說明:歡迎以任何方式進行轉載,但請在轉載後註明出處!