文件上传Fileupload组件

1.jsp页面:method必须为post,enctype="multipart/form-data"


<form action="UploadServlet" method="post" enctype="multipart/form-data">

username: <input type="text" name="username"><br>
file: <input type="file" name="file"><br>
file2: <input type="file" name="file2"><br>

<input type="submit" value="submit">


2 web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>com.shengsiyuan.servlet.UploadServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/UploadServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>


3.Servlet处理类:

jar包:
commons-io-2.0.1.jar
commons-fileupload-1.2.2.jar



package com.shengsiyuan.servlet;

import java.io.File;
import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class UploadServlet extends HttpServlet {
//处理文件上传 使用apache 的 FileUpload组件为Servlet及Web应用提供上传功能
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
/**
* 使用FileUpload上传步骤
* FileUpload:默认上传文件的大小为10k
*/
//步骤一:DiskFileItemFactory 磁盘文件条目工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
//upload文件夹为WebRoot下的一个文件夹;
//path得到该文件夹的绝对路径
String path = req.getRealPath("/upload");
//setRepository方法用于设置一个目录:用于临时存放上传的文件
//如果文件比较小,会直接存在内存里,如果比较大,则需要缓冲放在磁盘上存放(超过)
factory.setRepository(new File(path));
//设置文件大小,如果超出,文件会直接被写到磁盘上面 (1M),如果没超出,则存放在内存里
factory.setSizeThreshold(1024 * 1024);
//步骤二:ServletFileUpload:创建指定处理上传的对象;提供(parseRequest)方法去解析请求
ServletFileUpload upload = new ServletFileUpload(factory);

try {
//步骤三:FileItem:提供一序列方法
//list 为上传的多个文件
List<FileItem> list = (List<FileItem>) upload.parseRequest(req);
for (FileItem item : list) {
//取得form input 的name值
String name = item.getFieldName();
if (item.isFormField()) {// 这里处理的是普通文本域 input type=text
//获得name对应input的value值
String value = item.getString();
System.out.println(name + "=" + value);
//放到request范围
req.setAttribute(name, value);
} else {// 这里处理文件类型 type=file
// 获取到上传文件的名字
String value = item.getName();
int start = value.lastIndexOf("\\");
//处理 opera 浏览器会把上传文件的路径都取得,
String fileName = value.substring(start + 1);
req.setAttribute(name, fileName);
// 将文件写到指定磁盘的目录里:路径:path,文件名:fileName
item.write(new File(path, fileName));
// 也可由下面的方法写到磁盘
// OutputStream os = new FileOutputStream(new File(path,
// fileName));
// InputStream is = item.getInputStream();
// byte[] buffer = new byte[400];
// int length = 0;
// while((length = is.read(buffer)) != -1)
// {
// os.write(buffer, 0, length);
// }
//
// is.close();
// os.close();
}
}

} catch (Exception ex) {
ex.printStackTrace();
}
//将请求转发到页面
req.getRequestDispatcher("fileUploadResult.jsp").forward(req, resp);
}
}




4 fileUploadResult.jsp


<%@ page language="java" import="java.util.*, java.io.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<body>
<%
/*
InputStream is = request.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String buffer = null;
while(null != (buffer = br.readLine())) {
out.print(buffer + "<br>");
}
br.close();
is.close();
*/
%>
username : ${requestScope.username }<br>
file: ${requestScope.file}<br>
file2: ${requestScope.file2 }<br>
</body>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值