文件上传
首先创建一个JSP页面,使用HTML标签来创建文件上传表单,要注意几点:
示例代码:
<h3>文件上传:</h3>
选择要上传的文件:
<br />
<form action="/Synthesize/servlet/UploadServlet" method="post"
enctype="multipart/form-data">
<input type="file" name="file" size="50" /><br /> <input
type="submit" value="上传文件" />
</form>
然后写一个文件上传的方法,示例代码:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;");
response.setCharacterEncoding("UTF-8");// 设置编码格式
// 创建一个解析器工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置工厂的内存缓冲区大小,默认是10K
// factory.setSizeThreshold(1024*1024);
// 设置工厂的临时文件目录:当上传文件的大小大于缓冲区大小时,将使用临时文件目录缓存上传的文件
factory.setRepository(new File("C:\\TEMP\\"));
// 文件上传解析器
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置所有上传数据的最大值,单位字节long 1M
upload.setSizeMax(1024 * 1024);
// 设置单个文件上传的最大值
upload.setFileSizeMax(1024 * 1024);
// 设置编码格式
upload.setHeaderEncoding("UTF-8");
try {
// 解析请求,将表单中每个输入项封装成一个FileItem对象
List<FileItem> itemList = upload.parseRequest(request);
for (FileItem item : itemList) {
// 判断输入的类型是 普通输入项 还是文件
if (item.isFormField()) {
// 普通输入项 ,得到input中的name属性的值
String name = item.getFieldName();
// 得到输入项中的值
String value = item.getString("UTF-8");
System.out.println("name=" + name + " value=" + value);
} else {
// 上传的是文件,获得文件上传字段中的文件名
// 注意IE或FireFox中获取的文件名是不一样的,IE中是绝对路径,FireFox中只是文件名。
String fileName = item.getName();
System.out.println(fileName);
// 对IE中是绝对路径进行截取文件名
if (fileName.indexOf("\\") != -1) {
String[] str = fileName.split("\\\\");
fileName = str[str.length - 1];
}
// 返回表单标签name属性的值
String namede = item.getFieldName();
System.out.println(namede);
// 方法一:保存上传文件到指定的文件路径
InputStream is = item.getInputStream();
FileOutputStream fos = new FileOutputStream("F:\\tmp\\"
+ fileName);
byte[] buff = new byte[1024];
int len = 0;
while ((len = is.read(buff)) > 0) {
fos.write(buff);
}
PrintWriter out = response.getWriter();
out.write("上传成功!");
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
最后通过浏览器访问界面,并上传文件: