原因:多个服务器供给多个客户端,每个服务器负责专门的一部分,分工合作,所以出现跨服务器。
跨服务器准备
- 在上传文件依赖的jar包基础上还需要(客户端)导入
- 创建新的项目,启动新的tomcat配置端口号为9090,JMX port为1090。部署项目后,在webapp下创建uploads文件(注意事项:idea创建文件夹,如果文件夹为空,就不会自动在磁盘里创建文件夹,所以需要手动创建,或者在文件夹内创建一个test.jsp使得文件夹得以创建。如若不然,直接上传文件跨服务器,会报409错误)
- 为了防止405错误,打开TOMACT文件夹内,cof文件夹下,web.xml中,114行,加入
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
并将初始化时的listings改为false。
此时tomcat就运行方法运行了。
4.至此,环境搭建完成,开始写Controller:
1.创建一个跨服务器的路径(注意localhost:9090/后要加设定的项目名后,再加uploads/,之所以要加/是方便后续写文件名的时候,不用再添加/了。:
String path = "http://localhost:9090/testTomcat/uploads/";
2.获取原文件名:
String originalFilename = upload.getOriginalFilename();
3.获取UUID创建的随机名:
String replace = UUID.randomUUID().toString().replace("-", "");
4.文件名=原文件名+"_"+随机名:
String filenName=originalFilename+"_"+replace;
5.创建client(客户端对象):
Client client = Client.create();
6.客户端对象绑定(路径+文件名(此时只是文件名))返回一个类似路径的类:
WebResource resource = client.resource(path + filenName);
7.在此路径上put方法上传upload参数(也就是页面传来的数据):
resource.put(upload.getBytes());
**总体示例:
@RequestMapping(path = "/uploadfile2")
public String uploadfile2(MultipartFile upload) throws IOException {
System.out.println("跨服务器上传开始");
//1.创建跨服务器文件路径
String path = "http://localhost:9090/testTomcat/uploads/";//如果最后不加/则文件名前要加/
//2.获取名字,
String originalFilename = upload.getOriginalFilename();
//3.获取随机名字
String replace = UUID.randomUUID().toString().replace("-", "");
//4.文件名=名字+随机名字
String filenName=originalFilename+"_"+replace;
//5.创建客户端
Client client = Client.create();
//6.客户端绑定路径返回一个资源上传类(连接)
WebResource resource = client.resource(path + filenName);//类似于创建一个连接
//7.将页面传送过来的文件进行上传
resource.put(upload.getBytes());
System.out.println("跨服务上传结束");
return "fuck";
}
**