Bootstrap

mvc 删除服务器端文件夹,Spring学习笔记(九)——SpringMVC实现文件上传

SpringMVC实现文件上传

文件上传的必要前提

form 表单的 enctype 取值必须是:multipart/form-data

(默认值是:application/x-www-form-urlencoded)

enctype:是表单请求正文的类型

method 属性取值必须是 Post

提供一个文件选择域

f8496155eaa722487099af7548bd4674.png

文件上传的回顾

导入文件上传的jar包

commons-fileupload

commons-fileupload

1.3.1

commons-io

commons-io

2.4

编写文件上传的JSP页面

文件上传

选择文件:

编写文件上传的Controller控制器

/**

* 传统方式上传文件

* @param request

* @return

* @throws Exception

*/

@RequestMapping("/fileupload1")

public String fileupload1(HttpServletRequest request) throws Exception {

System.out.println("fileupload1执行了");

//使用fileupload组件完成上传

//上传位置

String path = request.getSession().getServletContext().getRealPath("/uploads");

System.out.println(path);

//判断路径是否存在

File file = new File(path);

if (!file.exists()) {

//创建该文件夹

file.mkdir();

}

//解析request对象,获取上传文件项

DiskFileItemFactory factory = new DiskFileItemFactory();

ServletFileUpload upload = new ServletFileUpload(factory);

//解析request

List fileItems = upload.parseRequest(request);

//遍历

for (FileItem fileItem : fileItems) {

//进行判断,fileItem是否为上传文件项

if (fileItem.isFormField()) {

//说明普通表单项

} else {

//说明是上传文件项

//获取到上传文件的名称

String fieldName = fileItem.getName();

//把文件名称设置成唯一值

String uuid = UUID.randomUUID().toString().replace("-", "").toUpperCase();

System.out.println(fieldName);

fieldName = uuid + "_" + fieldName;

//完成上传文件

fileItem.write(new File(file, fieldName));

//删除临时文件

fileItem.delete();

}

}

return "success";

}

结果如下

上传文件后

1bf804fa8ea373c6cb33e1f56ab2d8dc.png

SpringMVC方式文件上传

SpringMVC框架提供了MultipartFile对象,该对象表示上传的文件,要求变量名称必须和表单file标签的

name属性名称相同。

代码如下

/**

* SpringMVC方式上传文件

*

* @param request

* @return

* @throws Exception

*/

@RequestMapping("/fileupload2")

public String fileupload2(HttpServletRequest request, MultipartFile upload) throws Exception {

System.out.println("fileupload2执行了");

//使用fileupload组件完成上传

//上传位置

String path = request.getSession().getServletContext().getRealPath("/uploads");

System.out.println(path);

//判断路径是否存在

File file = new File(path);

if (!file.exists()) {

//创建该文件夹

file.mkdir();

}

//说明是上传文件项

//获取到上传文件的名称

String filename = upload.getOriginalFilename();

//把文件名称设置成唯一值

String uuid = UUID.randomUUID().toString().replace("-", "").toUpperCase();

System.out.println(filename);

filename = uuid + "_" + filename;

//完成上传文件

upload.transferTo(new File(path, filename));

return "success";

}

配置文件解析器对象

class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

SpringMVC跨服务器方式文件上传

搭建图片服务器

新建一个webapp项目,用tomcat启动

ad0ea87a1c55d4fda1ae9a559199cf1b.png

实现SpringMVC跨服务器方式文件上传

导入开发需要的jar包

com.sun.jersey

jersey-core

1.18.1

com.sun.jersey

jersey-client

1.18.1

2. 编写文件上传的JSP页面

SpringMVC跨服务器的方式文件上传

选择文件:

3. 编写控制器

/**

* SpringMVC跨服务器方式上传文件

*

* @param

* @return

* @throws Exception

*/

@RequestMapping("/fileupload3")

public String fileupload3(MultipartFile upload) throws Exception {

System.out.println("fileupload3执行了");

//上传位置

String path = "http://localhost:9090/uploads/";

//说明是上传文件项

//获取到上传文件的名称

String filename = upload.getOriginalFilename();

//把文件名称设置成唯一值

String uuid = UUID.randomUUID().toString().replace("-", "").toUpperCase();

System.out.println(filename);

filename = uuid + "_" + filename;

//完成上传文件,跨服务器上传

//1. 创建客户端对象

Client client = Client.create();

//2. 和图片服务器进行连接

WebResource resource = client.resource(path + filename);

//3. 上传文件

resource.put(upload.getBytes());

return "success";

}

注意同时启动两台服务器:

1. 两个端口改改成不一样,否则端口被占用

5ed63e63c9e8ef3caf04c6b384eaadd8.png

2. 需要设置不同的根目录,否则还是部署在了同一个根目录下

842454db9902a0a9957cbd5c96868b7f.png

;