首先声明,这是我在CSDN博客上原创的文章,搬到这里来了就直接~
最近不是一直在做老师的期末项目么,因为做的是一个视频在线点播的网站,所以在上传的部分一直使用smartupload上传文件,将数据写入数据库,可是这个工具有那么几个问题:
1. 已经不维护了
2. 对中文的支持很差
3. 上传文件的大小有限制,大于200M就会出问题
最早使用new String()的办法,可是对字数奇数偶数有限制,而且还是会出现乱码,又时百度,又是google的,没有好的办法,最后还是让我找到了一个非常完美的解决办法:使用uploadbean+filemover解决。
首先要引入3个jar包
下载地址:
http://download.csdn.net/detail/xq328220454/3807748
下面是上传实例的代码
upload.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@page import="javazoom.upload.UploadBean"%>
<%@page import="uploadutilities.FileMover"%>
<%@page import="com.up.IPTimeStamp"%>
<%@page import="javazoom.upload.MultipartFormDataRequest"%>
<%@page import="javazoom.upload.UploadFile"%>
<%@page import="com.vo.Movie"%>
<%@page import="com.dao.MovieDAO"%>
<%@page import="javax.sql.DataSource"%>
<%@page import="com.dbulits.DBHandler"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<%
//获取数据库连接
DataSource ds = DBHandler.getDataSource();
%>
<%
//创建上传对象
UploadBean upBean = new UploadBean();
//创建FileMover
FileMover fileMover = new FileMover();
//设置上传的目录
upBean.setFolderstore(application.getRealPath("/")
+ "OnlinePlay/voide/");
upBean.setOverwrite(true);
//添加上传监听
upBean.addUploadListener(fileMover);
%>
<%
//上传 and 重命名操作
if (MultipartFormDataRequest.isMultipartFormData(request)) {
//实例化重命名的类
IPTimeStamp its = new IPTimeStamp(request.getRemoteAddr());
//重命名
String name = its.getIPTimeRand() + ".flv";
fileMover.setNewfilename(name);
//获取request,同时设置最大文件上传,设置编码
MultipartFormDataRequest mrquest = new MultipartFormDataRequest(
request, null, 200 * 1024 * 1024,
MultipartFormDataRequest.COSPARSER, "utf-8");
//获取参数
String intro = mrquest.getParameter("intro");
String author = (String) session.getAttribute("username");
String voideName = mrquest.getParameter("name");
Date uptime = Calendar.getInstance().getTime();
int count = 0;//播放次数初始值
String type = mrquest.getParameter("type");
String id = its.getIPTimeRand().toString();
String path = "/OnlinePlay/voide/" + name;
//获取文件列表
Hashtable files = mrquest.getFiles();
if ((files != null) || (!files.isEmpty())) {
UploadFile file = (UploadFile) files.get("dyfile");
upBean.store(mrquest, "dyfile");
//写入数据库
Movie m = new Movie(id, type, voideName, author, uptime,
count, path, intro);
//将视频信息写入到数据库文件
MovieDAO md = new MovieDAO(ds);
md.addMovie(m);
session.setAttribute("uploadMovie", m);
response.sendRedirect("../upok.jsp");
}
}
%>
</body>
</html>
顺利解决上传文件时,表单被封装为二进制,获取中文写入数据库出现乱码的问题了。