1. 程式人生 > >SpringMVC下圖片檔案跨伺服器上傳

SpringMVC下圖片檔案跨伺服器上傳

圖片檔案跨伺服器上傳(我使用的公司雲桌面作為上傳伺服器,自己的筆記本作為儲存伺服器測試的)

一、上傳伺服器:

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),能解決的我可以給你們說一下