SpringMVC 上传图片详解
程序员文章站
2022-04-08 16:51:03
...
SpringMVC 上传图片详解
今天研究了SpringMVC上传文件,踩了很多坑,这里主要分享2种上传,一种是上传至本地,一种是跨服务器上传,希望可以帮助到大家。
一、上传至本地服务器
1、加入依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<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>
2、配置文件解析器
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485760" />
</bean>
**其中bean的id是固定的,不能自定义,里面可以配置很多属性,在这里以限制文件大小为例
3、编码
@RequestMapping("/fileupload")
public String fileuoload2(HttpServletRequest request, MultipartFile upload) throws Exception {
// 使用fileupload组件完成文件上传
// 上传的位置
String path = request.getSession().getServletContext().getRealPath("/uploads/");
// 判断,该路径是否存在
File file = new File(path);
if(!file.exists()){
// 创建该文件夹
file.mkdirs();
}
// 说明上传文件项
// 获取上传文件的名称
String filename = upload.getOriginalFilename();
// 把文件的名称设置唯一值,uuid
String uuid = UUID.randomUUID().toString().replace("-", "");
filename = uuid+"_"+filename;
// 完成文件上传
upload.transferTo(new File(path,filename));
System.out.println(path+filename);
return "success";
}
4、页面部分
选择文件:5、完成上传
二、跨服务器上传
在这里只做与第一种有差异部分的记录
1、需要加入创建连接的jar包
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.18.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.18.1</version>
</dependency>
2、 配置
3、编码
@RequestMapping("/fileupload")
public String fileuoload(MultipartFile upload) throws Exception {
System.out.println(“跨服务器文件上传…”);
// 定义上传文件服务器路径
String path = "http://localhost:9090/uploads/";
// 说明上传文件项
// 获取上传文件的名称
String filename = upload.getOriginalFilename();
// 把文件的名称设置唯一值,uuid
String uuid = UUID.randomUUID().toString().replace("-", "");
filename = uuid+"_"+filename;
// 创建客户端的对象
Client client = Client.create();
// 和图片服务器进行连接
WebResource webResource = client.resource(path + filename);
// 上传文件
webResource.put(upload.getBytes());
//存入的路径,可以保存展示
System.out.println(path+filename);
return "success";
}
4、完成上传
如果在跨服务器上传中出现403,需要去修改tomcat的配置文件
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
大概在100行左右加入。
如果出现409,是图片存储服务器没有响应的路径,去创建路径即可。希望可以帮助到大家。