jsp页面:
<form action="Upload" method="post" name="myform" enctype="multipart/form-data" >
<p> 用户:<input type="text" name="username" /></p>
<p> 密码:<input type="password" name="password"/></p>
<p> 头像: <input type="file" name="image" /> </p>
<input type="submit" value="提交">
</form>
Servlet页面(Upload.java):
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.io.FileOutputStream;
import java.io.InputStream;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
importorg.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FilenameUtils;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
publicclass Upload extends HttpServlet{
privatestaticfinallongserialVersionUID = 1L;
protectedvoid doGet(HttpServletRequest request, HttpServletResponseresponse)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("utf-8");
PrintWriter out=response.getWriter();
String sql="insert into person(username,password,img) values(?,?,?)";
String driverClass="com.microsoft.sqlserver.jdbc.SQLServerDriver";
String url="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Sweet";
String username="sa";
String password="123456";
Class.forName(driverClass);
Connection conn=DriverManager.getConnection(url, username, password);
PreparedStatement pstmt = conn.prepareStatement(sql);
try{
DiskFileItemFactory diskFactory = new DiskFileItemFactory(); //创建FileItem 对象的工厂
ServletFileUpload upload = new ServletFileUpload(diskFactory);//处理上传的文件数据,并将表单中每个输入项封装成一个FileItem 对象中
diskFactory.setRepository(new File("f:\\"));
upload.setHeaderEncoding("UTF-8");//设置编码格式
// 设置允许上传的最大文件大小 4M
upload.setSizeMax(4 * 1024 *1024);
List<FileItem> fileItems =upload.parseRequest(request);//解析请求,将表单中每个输入项封装成一个FileItem对象
for(intfi=0;fi<fileItems.size();fi++){ //判断输入的类型是普通输入项还是文件
if (!fileItems.get(fi).isFormField()){ //是文件
InputStream in =fileItems.get(fi).getInputStream();
StringdirectoryRealPath=request.getSession().getServletContext().getRealPath("/")+"upload/";
System.out.println(directoryRealPath);
File storeDirectory = new File(directoryRealPath);// 即代表文件又代表目录
if (!storeDirectory.exists()) {
storeDirectory.mkdirs();// 创建一个指定的目录
}
// 得到上传的名子
String filename =fileItems.get(fi).getName();
if (filename != null) {
filename = FilenameUtils.getName(filename);// 获取文件名称
}
// 解决文件同名的问题
filename = UUID.randomUUID() + "_" + filename;
// 上传文件,自动删除临时文件
File file = new File(storeDirectory, File.separator + filename); // 绝对目录/日期目录/文件名
FileOutputStream fo = new FileOutputStream(file);
int len = 0;
byte[] b = newbyte[1024];
while ((len = in.read(b)) != -1) {
fo.write(b, 0, len);
}
//关闭流
fo.close();
in.close();
pstmt.setString(3,filename );
fileItems.get(fi).delete();
} //删除文件不留
else{ //普通输入项
Strings=fileItems.get(fi).getString("utf-8");
switch(fi){
case0:pstmt.setString(1,s ); break;
case1:pstmt.setString(2,s );break;
default:out.println("Error");
}
}
}
pstmt.executeUpdate();
out.print("<script charset='UTF-8'language='javascript' type='text/javascript'>" +
" alert('上传成功');window.location.href='upload.jsp'</script>");
} catch(FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}finally{
DatabaseBean.closeStmt(pstmt);
DatabaseBean.closeConn(conn);
}
}
protectedvoid doPost(HttpServletRequest request, HttpServletResponseresponse)
throws ServletException, IOException {
doGet(request, response);
}