四、这是一个使用流来导入的例子:
package cn.com.mc.bidmanager.excel;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class ExcelImport {
public InputStream getStream(HttpServletRequest request){
DiskFileItemFactory factory = new DiskFileItemFactory();
//设置内存缓冲区,超过后写入临时文件
factory.setSizeThreshold(10240000);
//设置临时文件存储位置
factory.setRepository(new File( request.getSession().getServletContext() .getRealPath("")+"/document"));
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置单个文件的最大上传值
upload.setFileSizeMax(102400000);
// 设置整个request的最大值
upload.setSizeMax(102400000);
List items = null;
try {
items = upload.parseRequest(request);
} catch (FileUploadException e1) {
e1.printStackTrace();
}
FileItem item = (FileItem) items.get(0);
InputStream stream = null;
try {
stream = item.getInputStream();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
}
return stream;
}
}
Spring.xml:
<bean id="marksectDao" class="cn.com.mc.bidmanager.dao.impl.ComMarksectInfoDaoImpl" parent="daoTemplate"/>
<bean id="excelImportDao" class="cn.com.mc.bidmanager.excel.ExcelImport"/>
<bean id="bidBottomListDao" class="cn.com.mc.bidmanager.dao.impl.BidBottomListDaoImpl" parent="daoTemplate"/>
Service:
/**
* 功能:获得导入excel组件
*/
public ExcelImport getExcelImport() {
return (ExcelImport) getWebApplicationContext().getBean( "excelImportDao");
}
/**
* 功能:导入标底清单
* @param sectId 标段ID
* @param stream 输入流
* @throws Exception
* @throws
*/
public void importBottomList(String sectId, InputStream stream) throws Exception {
// 删除标段下的所有标底清单
bidBottomListDao.deleteAllBidBottomList(sectId);
// 解析Excel文件
Workbook w = Workbook.getWorkbook(stream);
Sheet s = w.getSheet(0);
int row = s.getRows();// 总行数
......
}
Action:
/**
* 功能:导入标底清单
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*/
public ActionForward importBottomList(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception{
String sectId=request.getParameter("sectId");//标段ID
InputStream stream=this.getExcelImport().getStream(request);
......
}
Jsp:
<script language="JavaScript" type="text/JavaScript">
function check(sectId)
{
if(document.all.bottomList.file.value.trim().length==0)
{
alert("请选择要导入的Excel文件!");
return;
}
document.all.bottomList.action="BidBottomListAction.do?forward=importBottomList§Id="+sectId;
document.all.bottomList.submit();
}
</script>
<input type="file" id="file" name="file" size="30" class="file"/>
<s:jspSecurity systemId="<%=(String)request.getSession().getAttribute("systemId")%>" resourceDesc="maintenance">
<input type="button" value="上 传" οnclick="check('<%=sectId %>');"
class="btn_mouseout" οnmοuseοver="this.className='btn_mouseover'"
οnmοuseοut="this.className='btn_mouseout'"
οnmοusedοwn="this.className='btn_mousedown'"
οnmοuseup="this.className='btn_mouseup'"/>
</s:jspSecurity>
Struts.xml:
<action path="/bidManager/list/BidBottomListAction"
type="cn.com.mc.bidmanager.action.BidBottomListAction"
parameter="forward">
<forward name="bidBottomList" path="/bidManager/list/bidBottomList.jsp"/>
<forward name="listCompare" path="/bidManager/list/listCompare.jsp"/>
<forward name="bottomCell" path="/bidManager/list/bottomCellList.jsp"/>
</action>