smartupload文件上传
上传页面upload----简单做个添加文件上传效果,点击即可添加上传文件框;使用EL表达式做视图层数据显示;使用正则表达式做个简单的页面验证;
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%
String path = request.getContextPath();
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<LINK href="<%=path %>/css/admin.css" type="text/css" rel="stylesheet">
<script language="JavaScript">
<!--
function trim(str){
return str.replace(/(^/s*)|(/s*$)/g, "");
}
var a = 1;
function deleteRow(tableid){
mytable=document.getElementById(tableid);
if(mytable.rows.length >2){
document.getElementById(tableid).deleteRow();
a--;
}else{
alert("上传的附件不能空留!");
}
}
function addRow(){
mytable=document.getElementById("rows");
r=mytable.insertRow();
r.bgColor ="#ffffff";
coll = r.insertCell();
coll.innerHTML="<input type='file' name=/"secondremark"+a+"/" id=/"secondremark"+a+"/" size='45' contentEditable='false'/>";
a++;
}
function addlinks(){
var pictitle = document.getElementById('pictitle').value;
if(trim(pictitle) == ''){
alert('文件所属栏目不能为空!');
return false;
}
var attmentname = document.getElementById('attmentname').value;
if(trim(attmentname) == ''){
alert('文件标题不能为空!');
return false;
}
var attremark = document.getElementById('attremark').value;
if(trim(attremark) == ''){
alert('文件说明不能为空!');
return false;
}
for(i=1;i<a;i++){
var photoStr = document.getElementById('secondremark'+i).value;
if(photoStr != ''){
var photoEx = photoStr.substring(photoStr.lastIndexOf(".")).toUpperCase();
if(photoEx != ".TXT" && photoEx != ".DOC" && photoEx != ".HTML" && photoEx != ".XML" && photoEx != ".XLS" && photoEx != ".PSD" && photoEx != ".JPG"){
alert('第'+i+'个附件文件格式不支持');
return false;
}
}else{
alert('上传文件不能为空');
return false;
}
}
addform.submit();
}
//-->
</script>
</head>
<body>
<TABLE cellSpacing=0 cellPadding=0 width="100%" align=center border=0>
<TR height=28>
</TR>
<TR>
<TD bgColor=#b1ceef height=1></TD>
</TR>
<TR height=20>
<TD background=/images/shadow_bg.jpg></TD>
</TR>
</TABLE>
<table width="100%" border="0" align="center" cellpadding="2" cellspacing="1" bgcolor="EFF7FF">
<form name="addform" method="post" action="<%=path %>/back/AddAttachmentsServlet" enctype="multipart/form-data">
<tr>
<td width="10%" height="30" bgcolor="EFF7FF" colspan="2" align="center">添加附件</td>
</tr>
<tr>
<td width="10%" height="30" bgcolor="#FFFFFF" align="center">附件所属</td>
<td bgcolor="#FFFFFF">
<select name="pictitle" id="pictitle">
<c:forEach var="listpictitle" items="${listpictitle}">
<option value="${listpictitle}">${listpictitle}</option>
</c:forEach>
</select>
</td>
</tr>
<tr>
<td width="10%" height="30" bgcolor="#FFFFFF" align="center">附件标题</td>
<td bgcolor="#FFFFFF">
<input type="text" name="attmentname" id="attmentname" size="30" maxlength="30">
</td>
</tr>
<tr>
<td width="10%" height="30" bgcolor="#FFFFFF" align="center">附件说明</td>
<td bgcolor="#FFFFFF">
<input type="text" name="attremark" id="attremark" size="30" maxlength="30">
</td>
</tr>
<td width="10%" height="30" bgcolor="#FFFFFF" align="center">附件上传</td>
<td>
<table id="rows">
<TR>
<TD align=right bgColor=#ffffff colSpan=8>
<font color="#CCCCCC">请选择正确的文件格式:txt,doc,html,xml,xls,psd不区分大小写</font>
<A οnclick=addRow() href="javascript:void">+ 增加</A>
<A onClick="deleteRow('rows')" href="javascript:void">- 删除</A></TD>
</TR>
</table>
</td>
<tr style="display:none">
<td width="10%" height="30" bgcolor="#FFFFFF" align="center">附件备用</td>
<td bgcolor="#FFFFFF">
<input type="text" name="thirdremark" id="thirdremark" size="30" maxlength="30">
</td>
</tr>
<tr>
<td width="10%" height="30" bgcolor="#FFFFFF" colspan="2" align="center">
<input type="button" value="增 加" height=18 width=100 οnclick="addlinks();">
<input type="reset" name="Submit2" value="重 置">
</td>
</tr>
</form>
</table>
</body>
</html>
数据直接通过Servlet处理后进行跳转,中间各个环节不一一作解;值得一提的有两点:
其一获取页面传过来的数据过程中,JSP内的request对象机制不起作用,被导入smartUpload中的request所覆盖,
当然也可以不引用该类的request,通过jsp内置对象request获取页面穿过来的数据,不过这样文件也就上传不了,那就等于没意义;
其二获取页面数据等一系列操作一定要置于smartUpload.upload()方法执行之后,否则获取不到页面传过来的
参数或数据,具体原因请看smartUpload.jar源代码,SmartUpload该类实体化后,也不能获取到该类中的属性和和方法执行后的返回值,必须smartUpload.upload()之后再来获取;
package com.jetsum.back.attachment;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspFactory;
import javax.servlet.jsp.PageContext;
import com.jetsum.back.bean.Attachments;
import com.jetsum.back.bean.PicUpload;
import com.jetsum.back.dao.AttachmentsDao;
import com.jspsmart.upload.File;
import com.jspsmart.upload.Request;
import com.jspsmart.upload.SmartUpload;
import com.jspsmart.upload.SmartUploadException;
public class AddAttachmentsServlet extends HttpServlet {
public void destroy() {
super.destroy();
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
/*
* (non-Javadoc)
*
* @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest,
* javax.servlet.http.HttpServletResponse)
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PicUpload picupload = new PicUpload();
Attachments attachments = null;
AttachmentsDao attachmentsDao = new AttachmentsDao();
SmartUpload smartUpload = new SmartUpload();
Request myrequest = smartUpload.getRequest();
// 设置文件大小(50M)
smartUpload.setMaxFileSize(1024 * 1024 * 1024 * 50); // 文件格式
// smartUpload.setAllowedFilesList("txt,doc,html,xml,psd,xls,jpg");
PageContext pageContext = JspFactory
.getDefaultFactory()
.getPageContext(this, request, response, null, true, 8192, true);
smartUpload.initialize(pageContext);
String failResult = "";
try {
smartUpload.upload();
} catch (SmartUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String filePath = request.getSession().getServletContext()
.getRealPath("/upload");
String pictitle = myrequest.getParameter("pictitle");
String attmentname = myrequest.getParameter("attmentname");
String attremark = myrequest.getParameter("attremark");
String thirdremark = myrequest.getParameter("thirdremark");
boolean result = false;
for (int i = 0; i < smartUpload.getFiles().getCount(); i++) {
File file = smartUpload.getFiles().getFile(i);
String myfile = file.getFileName();
System.out.println(myfile);
if (myfile != null && !myfile.equals("")) {
try {
file.saveAs(filePath + "/" + myfile);
} catch (SmartUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("上传终了: " + myfile);
}
attachments = new Attachments();
picupload = attachmentsDao.searchAttmentfByTitle(pictitle);
int attmentfk = picupload.getPictureid();
attachments.setAttmentfk(attmentfk);
attachments.setAttmentname(attmentname);
attachments.setAttremark(attremark);
attachments.setSecondremark(myfile);
attachments.setThirdremark(thirdremark);
result = attachmentsDao.addAttachments(attachments);
}
if (result) {
request.getRequestDispatcher("/back/ShowUploadServlet").forward(
request, response);
} else {
request.getRequestDispatcher(
"../WEB-INF/back/attachments/attachmentupload.jsp")
.forward(request, response);
}
}
public void init() throws ServletException {
}
}