SpringMVC圖片文件跨服務(wù)器上傳
圖片文件跨服務(wù)器上傳(我使用的公司云桌面作為上傳服務(wù)器,自己的筆記本作為存儲服務(wù)器測試的)
一、上傳服務(wù)器:
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>
<!-- 夸服務(wù)器文件上傳 -->
<!-- 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">
多個(gè)文件: <input type="file" name="fileList" multiple/>
<input type="submit" value="提交" />
</form>
3、后臺controller:
/**
* 多文件,跨服務(wù)器上傳
* @param request
* @return
*/
@ResponseBody
@RequestMapping("/uploadImg")
public String fileUpload(MultipartHttpServletRequest request){
JSONObject joson = new JSONObject();
String serverAddress = "http://172.xxx.xxx.xxx:8080";//服務(wù)器地址
String folder = "/upload/";//文件夾名稱
String fullPaths = "";//絕對路徑
String reletivePaths = "";//相對路徑
// 創(chuàng)建jesy服務(wù)器
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這個(gè)Key, 得到對應(yīng)的文件集合列表.
// 只是在這個(gè)Map中, 文件被包裝成MultipartFile類型
List<MultipartFile> fileList = request.getFiles(fileName);
if (fileList.size() > 0) {
// 遍歷文件列表
Iterator<MultipartFile> fileIte = fileList.iterator();
while (fileIte.hasNext()) {
// 獲得每一個(gè)文件
MultipartFile multipartFile = fileIte.next();
// 截取文件的后綴名(.jpg)
String originalFilename = multipartFile.getOriginalFilename();//原始文件名
String subString = originalFilename.substring(originalFilename.indexOf("."));//文件名后綴
//System.out.println("原始文件名:"+originalFilename+";文件后綴名:"+subString);
// 將文件對象轉(zhuǎn)換為字節(jié)
byte[] fileBytes = multipartFile.getBytes();
// 生成唯一的一個(gè)字符串名稱(帶后綴)
String newFilename = UUID.randomUUID().toString()+subString;
//System.out.println("唯一文件名(帶后綴):"+newFilename);
// 開始上傳文件
// 拼接保存的路徑(相對路徑)
reletivePaths = folder+newFilename;
// 拼接最終保存的路徑(絕對對路徑)
fullPaths = serverAddress+reletivePaths;
//把文件關(guān)聯(lián)到遠(yuǎn)程服務(wù)器
WebResource webResource = client.resource(fullPaths);
// 上傳
webResource.put(String.class, fileBytes);
fileNameList.add(newFilename);//文件名
relaPathList.add(reletivePaths);//相對路徑
realPathList.add(fullPaths); //真實(shí)完整路徑
}
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();
}
二、存儲圖片文件服務(wù)器:
1、Tomcat的conf目錄下的web.xml文件的大概100行添加如下幾行(這要是不打開就會報(bào)錯(cuò))
<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目錄下創(chuàng)建一個(gè)upload目錄,用來存放上傳的文件
3、啟動(dòng)Tomcat靜等著上傳服務(wù)器那邊的請求
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- SpringMVC 數(shù)據(jù)校驗(yàn)實(shí)例解析
- springmvc的validator數(shù)據(jù)校驗(yàn)的實(shí)現(xiàn)示例代碼
- SpringMVC 數(shù)據(jù)校驗(yàn)方法(必看篇)
- springmvc使用JSR-303進(jìn)行數(shù)據(jù)校驗(yàn)實(shí)例
- springmvc實(shí)現(xiàn)跨服務(wù)器文件上傳功能
- springMVC+jersey實(shí)現(xiàn)跨服務(wù)器文件上傳
- Spring MVC下 bootStrap服務(wù)器分頁代碼
- 基于SpringMVC+Bootstrap+DataTables實(shí)現(xiàn)表格服務(wù)端分頁、模糊查詢
- Spring mvc服務(wù)端數(shù)據(jù)校驗(yàn)實(shí)現(xiàn)流程詳解
相關(guān)文章
關(guān)于Springboot的擴(kuò)展點(diǎn)DisposableBean的原理解析
這篇文章主要介紹了關(guān)于Springboot的擴(kuò)展點(diǎn)DisposableBean的原理解析,DisposableBean是一個(gè)接口,為Spring bean提供了一種釋放資源的方式 ,只有一個(gè)擴(kuò)展方法destroy(),需要的朋友可以參考下2023-05-05
SpringBoot多數(shù)據(jù)源配置方式以及報(bào)錯(cuò)問題的解決
這篇文章主要介紹了SpringBoot多數(shù)據(jù)源配置方式以及報(bào)錯(cuò)問題的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
Java substring方法實(shí)現(xiàn)原理解析
這篇文章主要介紹了Java substring方法實(shí)現(xiàn)原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
RestTemplate發(fā)送get和post請求,下載文件的實(shí)例
這篇文章主要介紹了RestTemplate發(fā)送get和post請求,下載文件的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09
利用Spring MVC+Mybatis實(shí)現(xiàn)Mysql分頁數(shù)據(jù)查詢的過程詳解
這篇文章主要給大家介紹了關(guān)于利用Spring MVC+Mybatis實(shí)現(xiàn)Mysql分頁數(shù)據(jù)查詢的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08
springboot DTO字符字段與日期字段的轉(zhuǎn)換問題
這篇文章主要介紹了springboot DTO字符字段與日期字段的轉(zhuǎn)換問題,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
Java通過Callable實(shí)現(xiàn)多線程
這篇文章主要介紹了Java通過Callable實(shí)現(xiàn)多線程,Callable的任務(wù)執(zhí)行后可返回值,運(yùn)行Callable任務(wù)可以拿到一個(gè)Future對象,Future表示異步計(jì)算的結(jié)果,它提供了檢查計(jì)算是否完成的方法,以等待計(jì)算的完成,并檢查計(jì)算的結(jié)果,需要的朋友可以參考下2023-10-10
解析Mybatis的insert方法返回?cái)?shù)字-2147482646的解決
這篇文章主要介紹了解析Mybatis的insert方法返回?cái)?shù)字-2147482646的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
Nacos與SpringBoot實(shí)現(xiàn)配置管理的開發(fā)實(shí)踐
在微服務(wù)架構(gòu)中,配置管理是一個(gè)核心組件,而Nacos為此提供了一個(gè)強(qiáng)大的解決方案,本文主要介紹了Nacos與SpringBoot實(shí)現(xiàn)配置管理的開發(fā)實(shí)踐,具有一定的參考價(jià)值2023-08-08

