21_SpringMVC 上传文件

2019-08-20  本文已影响0人  lww文

文件上传的必要前提

A form 表单的 enctype 取值必须是:multipart/form-data(默认值是:application/x-www-form-urlencoded)enctype:是表单请求正文的类型

B method 属性取值必须是 Post

C 提供一个文件选择域

文件上传的原理分析

当 form 表单的 enctype 取值不是默认值后,request.getParameter()将失效。

 enctype=”application/x-www-form-urlencoded”时,form 表单的正文内容是: key=value&key=value&key=value

当 form 表单的 enctype 取值为 Mutilpart/form-data 时,请求正文内容就变成: 每一部分都是 MIME 类型描述的正文

 -----------------------------7de1a433602ac 分界符

Content-Disposition: form-data; name="userName"  协议头

aaa 协议的正文

-----------------------------7de1a433602ac Content-Disposition: form-data; name="file"; filename="C:\Users\zhy\Desktop\fileupload_demofile\b.txt" Content-Type: text/plain 协议的类型(MIME 类型)

 bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb -----------------------------7de1a433602ac--

借助第三方组件实现文件上传

使用 Commons-fileupload 组件实现文件上传,需要导入该组件相应的支撑 jar 包:Commons-fileupload 和commons-io。commons-io 不属于文件上传组件的开发 jar 文件,但Commons-fileupload 组件从 1.1 版本开始,它工作时需要 commons-io 包的支持。

 

1:导入坐标   或者jar

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

3. 编写文件上传的Controller控制器

@RequestMapping(value="/fileupload2")

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

 // 先获取到要上传的文件目录

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

// 创建File对象,一会向该路径下上传文件

File file = new File(path);

// 判断路径是否存在,如果不存在,创建该路径

 if(!file.exists()) { file.mkdirs(); }

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

String filename = upload.getOriginalFilename();

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

// 把文件的名称唯一化

filename = uuid+"_"+filename;

// 上传文件

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

 return "success"; }

3. 配置文件解析器对象

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

在实际开发中,我们会有很多处理不同功能的服务器。例如:

应用服务器:负责部署我们的应用

数据库服务器:运行我们的数据库

缓存和消息服务器:负责处理大并发访问的缓存和消息

文件服务器:负责存储用户上传文件的服务器。

(注意:此处说的不是服务器集群)

1. 搭建图片服务器   新建一个项目  修改运行这个项目的tomcat 配置

2:在上传图片的项目中 添加新坐标

3:编写文件上传的JSP页面

4:3. 编写控制器

@RequestMapping(value="/fileupload3")

public String fileupload3(MultipartFile upload) throws Exception {

定义图片服务器的请求路径

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

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

String filename = upload.getOriginalFilename();

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

 // 把文件的名称唯一化

 filename = uuid+"_"+filename;

// 向图片服务器上传文件

 // 创建客户端对象

Client client = Client.create();

 // 连接图片服务器

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

// 上传文件

webResource.put(upload.getBytes());

 return "success"; }

==============注意事项

如果出现returned a response status of 403 Forbidden

Tomcat目录下的conf文件夹下的web.xml中加入

上一篇 下一篇

猜你喜欢

热点阅读