搭建一個用於學習的 圖片伺服器的過程記錄
1, 使用IDEA建立一個maven的web工程, 作為伺服器只需要在webapp下建立一個images資料夾作為圖片的儲存目錄,然後在web.xml裡面配置tomcat外掛, 虛擬路徑設定為/, 埠號改為 8003,防止8080埠被意外佔用.
2, 使用springMVC的檔案上傳測試效果,,但是此上傳只能上傳到當前伺服器, 此時需要匯入跨伺服器上傳檔案的jar包工具,依賴如下:
<dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-core</artifactId> <version>1.18.1</version> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-client</artifactId> <version>1.18.1</version> </dependency>
3,配置springMVC的檔案上傳解析器等就不寫了,,後臺上傳程式碼如下:
@Value("${FILE_SERVER_URL}") private String file_server_url; @RequestMapping("/upload.do") public Result upload(MultipartFile file) { //接收到上傳的檔案,獲取他的字尾名 String originalFilename = file.getOriginalFilename(); String extname = originalFilename.substring(originalFilename.lastIndexOf(".") ); String uuid = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase(); String url = file_server_url+uuid+extname; //建立一個上傳客戶端物件 Client client = Client.create(); //連線到圖片伺服器 WebResource webResource = client.resource(url); try { //上傳圖片 webResource.put(file.getBytes()); // System.err.println("url = " + url); return new Result(true, url); } catch (Exception e) { e.printStackTrace(); return new Result(false, "上傳失敗"); } }
4, 測試一跑, 報錯,檔案上傳失敗,,檢視報錯資訊 : "返回了一個403狀態碼" . 403是許可權不足的意思, 得知tomcat預設跨伺服器之間是 只讀 狀態,需要配置tomcat為 可讀寫狀態,但是IDEA的maven外掛中無法修改配置檔案(可能是我不會配置吧), 只好把web.xml中的外掛清除, 然後在idea中整合我電腦上的tomcat, 然後修改tomcat的conf資料夾下web.xml檔案,修改如下:
<servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <!--在這裡加入下面這段,,將只讀設定為false--> <init-param> <param-name>readonly</param-name> <param-value>false</param-value> </init-param> <!-- 上面這段--> <init-param> <param-name>listings</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
然後在idea中tomcat部署的選項中 勾選: Deploy Applications configured in Tomcat instance 這個選項, 重新啟動伺服器再次測試
理論上應該成功的,結果是沒有報403 的錯誤了,,但是又報了一個409的 狀態碼的錯誤, 409代表伺服器內執行有衝突,,網上查了下資料,說是路徑有問題,,對比了下路徑貌似沒有問題啊
5, 由於我的images資料夾是 空的,我往裡面添加了一個測試的html檔案,然後用瀏覽器訪問,訪問成功,路徑沒問題呀,, 然後我又試著上傳了一次, 這次居然成功了!!!! 我想到難道這和空資料夾有關,,?
6檔案上傳成功,按道理講,圖片伺服器就搭建好了,但是此時還存在一個大問題: 此時上傳的圖片全是儲存在部署到Tomcat的webapps下的ROOT 資料夾下的images中, 這個ROOT資料夾就是我們的圖片伺服器, 當在IDEA中重啟tomcat時,會重新部署專案到這裡,此時專案就會被覆蓋,之前上傳的圖片將全部消失,那麼之前儲存下來的url地址將全部失效,怎麼解決呢?
7, 接下來需要在tomcat的conf資料夾下的server.xml 檔案中新增 自定義地址對映的配置 配置新增如下: 在host標籤中新增:
<Context path="/images" docBase="E:\project\pinyougou_image" reloadable="true" />
然後重啟圖片伺服器, 測試上傳圖片,此時圖片順利儲存到對映的本地資料夾下了,而訪問的url不變,這樣即使重啟tomcat也不會造成無法訪問的問題了,至此,圖片伺服器搭建成功!