版权声明:学习 https://blog.csdn.net/qq_40238006/article/details/83860006
图片文件跨服务器上传(我使用的公司云桌面作为上传服务器,自己的笔记本作为存储服务器测试的)
一、上传服务器:
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),能解决的我可以给你们说一下