SpringMVC下圖片檔案跨伺服器上傳
阿新 • • 發佈:2018-11-27
圖片檔案跨伺服器上傳(我使用的公司雲桌面作為上傳伺服器,自己的筆記本作為儲存伺服器測試的)
一、上傳伺服器:
1、pom檔案(使用jersey外掛)
<!-- 上傳元件包 --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.9</version> </dependency> <!-- 誇伺服器檔案上傳 --> <!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-client --> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-client</artifactId> <version>1.18.6</version> </dependency> <!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-core --> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-core</artifactId> <version>1.18.6</version> </dependency> <!-- https://mvnrepository.com/artifact/org.glassfish.jersey.core/jersey-common --> <dependency> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-common</artifactId> <version>2.26</version> </dependency>
2、前端頁面:
<form action="${pageContext.request.contextPath}/Abc/uploadImg.do" enctype="multipart/form-data" method="post">
多個檔案: <input type="file" name="fileList" multiple/>
<input type="submit" value="提交" />
</form>
3、後臺controller:
/** * 多檔案,跨伺服器上傳 * @param request * @return */ @ResponseBody @RequestMapping("/uploadImg") public String fileUpload(MultipartHttpServletRequest request){ JSONObject joson = new JSONObject(); String serverAddress = "http://172.xxx.xxx.xxx:8080";//伺服器地址 String folder = "/upload/";//資料夾名稱 String fullPaths = "";//絕對路徑 String reletivePaths = "";//相對路徑 // 建立jesy伺服器 Client client = Client.create(); // 獲取檔名字 Iterator<String> fileNames = request.getFileNames(); List<String> fileNameList = new ArrayList<String>(); List<String> relaPathList = new ArrayList<String>(); List<String> realPathList = new ArrayList<String>(); try { while (fileNames.hasNext()) {//判斷多檔案 // 把fileNames集合中的值打出來 String fileName = fileNames.next(); // request.getFiles(fileName)方法即通過fileName這個Key, 得到對應的檔案集合列表. // 只是在這個Map中, 檔案被包裝成MultipartFile型別 List<MultipartFile> fileList = request.getFiles(fileName); if (fileList.size() > 0) { // 遍歷檔案列表 Iterator<MultipartFile> fileIte = fileList.iterator(); while (fileIte.hasNext()) { // 獲得每一個檔案 MultipartFile multipartFile = fileIte.next(); // 擷取檔案的字尾名(.jpg) String originalFilename = multipartFile.getOriginalFilename();//原始檔名 String subString = originalFilename.substring(originalFilename.indexOf("."));//檔名字尾 //System.out.println("原始檔名:"+originalFilename+";檔案字尾名:"+subString); // 將檔案物件轉換為位元組 byte[] fileBytes = multipartFile.getBytes(); // 生成唯一的一個字串名稱(帶字尾) String newFilename = UUID.randomUUID().toString()+subString; //System.out.println("唯一檔名(帶字尾):"+newFilename); // 開始上傳檔案 // 拼接儲存的路徑(相對路徑) reletivePaths = folder+newFilename; // 拼接最終儲存的路徑(絕對對路徑) fullPaths = serverAddress+reletivePaths; //把檔案關聯到遠端伺服器 WebResource webResource = client.resource(fullPaths); // 上傳 webResource.put(String.class, fileBytes); fileNameList.add(newFilename);//檔名 relaPathList.add(reletivePaths);//相對路徑 realPathList.add(fullPaths); //真實完整路徑 } joson.put("success", 1); joson.put("error", ""); joson.put("fileNameList", fileNameList); joson.put("relaPathList", relaPathList); joson.put("realPathList", realPathList); } else { joson.put("success", 0); joson.put("error", "上傳失敗"); } } } catch (UniformInterfaceException e) { // TODO Auto-generated catch block e.printStackTrace(); joson.put("success", 0); joson.put("error", "上傳失敗"); } catch (ClientHandlerException e) { // TODO Auto-generated catch block e.printStackTrace(); joson.put("success", 0); joson.put("error", "上傳失敗"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); joson.put("success", 0); joson.put("error", "上傳失敗"); } return joson.toString(); }
二、儲存圖片檔案伺服器:
1、Tomcat的conf目錄下的web.xml檔案的大概100行新增如下幾行(這要是不開啟就會報錯)
<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> <!-- 上面是本來就有的 --> <!-- 允許檔案讀寫 --> <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>
2、在該Tomcat的/webapps/ROOT目錄下建立一個upload目錄,用來存放上傳的檔案
3、啟動Tomcat靜等著上傳伺服器那邊的請求
如果有什麼疑問的可以聯絡我(QQ37091905),能解決的我可以給你們說一下