-
1 # 系統架構老中醫
-
2 # 猿百問
首先提出的"這個問題本身,存在問題"!#伺服器#
情況一:如果你問的是#Java# 這種語言,後端程式部分如何透過HTTP通訊方式處理圖片上傳?
我這樣回答你:JAVA基礎元件之一Serverlet封裝了對於HTTP這種通訊方式的基本操作,但Serverlet太原始,無法滿足複雜業務場景等等原因,催生出了類似Spring系列開源框架,這類框架遮蔽更多的底層操作。一般在企業中我們在介面層(控制器層)使用SpringM vc,處理與外界的通訊(HTTP資料互動)。
首先外界傳送一個HTTP請求,該請求定址到介面層(控制器)對應的方法;其次該方法提供檔案物件引數,接收外界請求發過來的檔案資料;再者在該方法內使用"流"去解析檔案物件引數;最後將該解析資料組裝成某種格式(jpg,png等)圖片,再使用流將其寫入到磁碟;
情況二:WEB伺服器(TOMCAT,JETTY等軟體伺服器)儲存處理圖片。軟體伺服器本身依託於應用伺服器,所以看似將圖片儲存在WEB伺服器某個資料夾下,本質還是儲存在它依賴的應用伺服器磁碟上,只是對圖片的索引和路徑做了更多包裝,然而這種包裝往往是缺陷較大的,在小專案中沒什麼影響反而很方便。
情況三:應用服務如何處理#圖片# ,應用伺服器(雲伺服器,硬體伺服器,這兩本質上是一體的,一般採用虛擬化技術將硬體伺服器虛擬成多個雲伺服器),一般在實際專案應用中,我們會把單獨的伺服器或者伺服器某個磁碟劃分為檔案儲存區,JAVA透過"流"將檔案寫入指定地點,在資料庫儲存相對路徑,便於定址。這個時候圖片和應用程式物理上相互獨立,但又邏輯相連。
情況四:如果問的是在圖片傳輸開始到結束整個流程中,圖片如何流通?
圖片在客戶端(APP,Web前端等等)首先需要編碼(列如二進位制流),HTTP請求攜帶這部分資料在網路中傳輸,定址到對應#Java# 方法,這時候,JAVA控制器會接收解析這部分資料,一般用檔案物件去接收,再然後透過JAVA封裝的工具物件(流)去再次解析,然後再次生成圖片,寫入到對應的儲存位置。
-
3 # ksfzhaohui
首先要知道http是應用層協議,其次是如何使用http協議;要使用http協議,需要伺服器端實現http協議,市面上實現http協議的中介軟體或者框架很多,比如web容器tomcat,jboss等,框架比如netty;當然如果你不想用現有的實現方式,可以自己透過http規範去實現一套;
然後就是如何接受圖片,tomcat透過servelt直接使用流的方式獲取圖片檔案;netty可以透過將圖片分割成位元組陣列的方式傳輸給伺服器,然後合併成圖片。
回覆列表
基於http的可以使用servlet系列的servlet api搞定圖片的上傳;基於tcp的可以自己定義通訊的協議或採用protobuf等進行資料表示,解碼出來之後把資料合併為圖片檔案.