跨服务器文件上传
程序员文章站
2022-03-11 20:05:30
...
准备两个tomcat服务器,并创建一 个用于存放图片的web工程
避免默认的8080端口被占用,先修改tomcat默认端口
打开tomcat -->conf -->server.xml
然后启动tomcat : bin -->startup.bat
测试能不能通
在webapps文件夹下再创建两个文件夹,然后放一张图片,再浏览器端试试能不能访问
tomcat的web.xml配置中加入,允许读写操作: 否则tomcat默认只有读操作
加入此行的含义是:接收文件的目标服务器可以支持写入操作
配置完重启服务器
pom依赖:前两个为普通文件上传需要的,最后一个是跨服务器上传需要的依赖
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.18.1</version>
</dependency>
Controller
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import java.util.UUID;
@Controller("fileUploadController2")
public class FileUploadController2 {
//文件上传的服务器地址
public static final String FileUpload_URL = "http://localhost:8089/image/upload/";
@RequestMapping("/fileUpload2")
public String testResponseJson(String picName, MultipartFile uploadFile) throws Exception {
//定义文件名
String fileName = "";
//1.获取原始文件名
String uploadFileName = uploadFile.getOriginalFilename();
//2.截取文件扩展名
String extendName = uploadFileName.substring(uploadFileName.lastIndexOf(".") + 1, uploadFileName.length());
//3.把文件加上随机数,防止文件重复
String uuid = UUID.randomUUID().toString().replace("-", "").toUpperCase();
//4.判断是否输入了文件名
if (!StringUtils.isEmpty(picName)) {
fileName = uuid + "_" + picName + "." + extendName;
} else {
fileName = uuid + "_" + uploadFileName;
}
System.out.println(fileName);
//5.创建 sun 公司提供的 jersey 包中的 Client 对象
Client client = Client.create();
//6.指定上传文件的地址,该地址是 web 路径
WebResource resource = client.resource(FileUpload_URL + fileName);
//7.实现上传
String result = resource.put(String.class, uploadFile.getBytes());
System.out.println(result);
return "success";
}
}
jsp:
<form action="/fileUpload2" method="post" enctype="multipart/form-data">
名称:<input type="text" name="picName"/><br/>
图片:<input type="file" name="uploadFile"/><br/>
<input type="submit" value="上传"/></form>
</body>
springmvc.xml
<!-- location 表示路径,mapping 表示文件,**表示该目录下的文件以及子目录的文件 -->
<mvc:resources location="/js/" mapping="/js/**"/>
<mvc:resources location="/uploads/" mapping="/uploads/**"/>
<!-- 配置文件上传解析器 -->
<!-- id 的值是固定的-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置上传文件的最大尺寸为 5MB -->
<property name="maxUploadSize">
<value>5242880</value>
</property>
</bean>
注意: 文件上传的解析器 id 是固定的,不能起别的名称,否则无法实现请求参 数的绑定。(不光是文件,其他字段也将无法绑定)