1. 原理:
(个人概述:前台用form表单,将文件放在request中。后台用request.getInputStream()从request中获取文件,主要是读取文件流,再将文件流写到指定文件路径下。)
众所周知,在客户端代码中需要使用
<input type='file' name='file' />
来选择要上传的文件,并上传,代码如上:
<
form
action
="servlet/UploadFile"
method
="post"
enctype ="multipart/form-data" >
< input type ="file" name ="file1" id ="file1" />
< input type ="file" name ="file2" id ="file2" />
< input type ="submit" value ="上传" />
</ form >
enctype ="multipart/form-data" >
< input type ="file" name ="file1" id ="file1" />
< input type ="file" name ="file2" id ="file2" />
< input type ="submit" value ="上传" />
</ form >
在上传文件时,
<form>
标签必须加上
enctype="multipart/form-data"
,否则浏览器无法将文件内容上传到服务端。在
Servlet
的
doPost
方法中编写如下的代码
。
public
void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
java.io.InputStream is = request.getInputStream();
java.io.FileOutputStream fos = new java.io.FileOutputStream("d:\\out.txt");
byte[] buffer = new byte[8192];
int count = 0;
while((count = is.read(buffer)) >0)
{
fos.write(buffer, 0, count);
}
fos.close();
}
throws ServletException, IOException
{
java.io.InputStream is = request.getInputStream();
java.io.FileOutputStream fos = new java.io.FileOutputStream("d:\\out.txt");
byte[] buffer = new byte[8192];
int count = 0;
while((count = is.read(buffer)) >0)
{
fos.write(buffer, 0, count);
}
fos.close();
}
2.为什么上传文件要加一个属性enctype="multipart/form-data"
首先知道enctype这个属性管理的是表单的MIME编码。共有三个值可选:
1、application/x-www-form-urlencoded
1、application/x-www-form-urlencoded
其中application/x-www-form-urlencoded是默认值,作用是设置表单传输的编码。
2、multipart/form-data
2、multipart/form-data
而multipart/form-data是用来制定传输数据的特殊类型的,主要就是我们上传的非文本的内容
3、text/plain
3、text/plain
text/plain是纯文本传输的意思,在发邮件的时候要设置这种编码类型
3.后台对以上三种的获取方式:
大家经常 用servlet和jsp,但是对 request.getInputStream()和request.getReader()比较陌生。
request.getParameter()
request.getInputStream()
request.getReader()
这 三个方法都是从request对象中得到提交的数据,但是用途不同,要根据<form>表单提交数据的编码方式选择不同的方法。
request.getParameter()
request.getInputStream()
request.getReader()
这 三个方法都是从request对象中得到提交的数据,但是用途不同,要根据<form>表单提交数据的编码方式选择不同的方法。
分别对应:
application/x-www-form-urlencoded;
multipart/form-data;
text/plain