1. 程式人生 > >搭建一個用於學習的 圖片伺服器的過程記錄

搭建一個用於學習的 圖片伺服器的過程記錄

 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也不會造成無法訪問的問題了,至此,圖片伺服器搭建成功!