在企業級開發里,經常要用到導入,在我開發的系統里面導入用到的第三方導入組件是uploadify,下面我把代碼貼到下面來,基本上可以套上去使用!
-----------------------------------------------------------------------------------------------------
前端代碼:
var buttonText='導入'
$("#uploadify").uploadify({
'buttonClass' : 'scbtn',
'debug' : false, //開啟調試
'auto' : true, //是否自動上傳
'swf' : 'uploadify/uploadify.swf', //引入uploadify.swf
'uploader' : 'confirmationUploadAction',//請求路徑
'queueID' : 'fileQueue',//隊列id,用來展示上傳進度的
'width' : '80', //按鈕寬度
'height' : '35', //按鈕高度
'queueSizeLimit' : 1, //同時上傳文件的個數
'fileTypeDesc' : 'excel文件', //可選擇文件類型說明
'fileTypeExts' : '*.xlsx;*.xls', //控制可上傳文件的擴展名
'multi' : false, //允許多文件上傳
'buttonText' : buttonText,//按鈕上的文字
'fileSizeLimit' : '2MB', //設置單個文件大小限制
'fileObjName' : 'uploadify', //<input type="file"/>的name
'method' : 'post',
'removeCompleted' : true,//上傳完成后自動刪除隊列
'onFallback':function(){
// alert("您未安裝FLASH控件,無法上傳圖片!請安裝FLASH控件后再試。");
},
'onSelect' : function() {
layer.load(1, {
shade : [ 0.1, '#000', true ]
});
}, 'onUploadSuccess':function(file, data, response){
var flag= eval('('+data+')');
var result=flag.flag;
if(result=="ok"){
layer.closeAll('loading');
layer.msg("導入成功", {icon: 1})
search();
}else{
layer.closeAll('loading');
layer.msg("導入失敗", {icon: 2})
}
}
});
----------------------------------------------------------------------------------------------------------------
stutas2的配置文件:(文件頭我沒有給出來)
<struts>
<package name="upload" extends="struts-default">
<action name="confirmationUploadAction" method="confirmationUpload" class="com.pec.action.UploadifyAction"></action>
</package>
</struts>
----------------------------------------------------------------------------------------------------------------
Action層
public String confirmationUpload() throws Exception {
response.setContentType("text/html;charset=utf-8");
Map<String, Object> map = new HashMap<String, Object>();
PrintWriter out = response.getWriter();
String extName = "";// 擴展名
String newFileName = "";// 新文件名
// 設置傳入的文件的編碼
HttpServletResponse response = ServletActionContext.getResponse();
response.setCharacterEncoding("utf-8");
// 服務器目錄
String targetDirectory = ServletActionContext.getServletContext()
.getRealPath("/upload");
String nowTime = new SimpleDateFormat("yyyymmddHHmmss")
.format(new Date());// 當前時間
// 獲取擴展名
if (uploadifyFileName.lastIndexOf(".") >= 0) {
extName = uploadifyFileName.substring(uploadifyFileName
.lastIndexOf("."));
}
// 設置新文件名稱
newFileName = nowTime + extName;
// 生成上傳的文件對象
File targetFile = new File(targetDirectory, newFileName);
// 文件已經存在刪除原有文件
if (targetFile.exists()) {
targetFile.delete();
}
// 復制file對象上傳
FileUtils.copyFile(uploadify, targetFile);
// 上傳數據到數據庫
// DrmUser user = (DrmUser) session.get("drmUser");
String flag="";
try {
flag= uploadifyService.saveConfirmation(targetFile);
} catch (Exception e) {
flag="err";
e.printStackTrace();
}
result.put("flag", flag);
JSONObject json = JSONObject.fromObject(result);
out.write(json.toString());
out.flush();
out.close();
return null; // 這里不需要頁面轉向,所以返回空就可以了
}
-------------------------------------------------------------------------------------------------------------------------------
service層,到這里基本上就把excel上的數據導入到對象里面來了,根據自己實際情況再進行接下來的操作
public String saveConfirmation(File file) {
Workbook wb = null;
Sheet sheet = null;
String flag=null;//返回給Action的保存狀態 'ok'保存成功 'err'保存失敗
List<DrmConfirmation> list=new ArrayList<>();
// 將文件轉成文件輸入流
InputStream is;
try {
is = new FileInputStream(file);
// Workbook workbook=Workbook.getWorkbook(file);
// 判斷Excel版本
if (file.getName().toUpperCase().endsWith(".XLS")) {
wb = new HSSFWorkbook(is);// Excel 2003
} else {
wb = new XSSFWorkbook(is);// Excel 2007
}
// 獲得第一個表格頁
sheet = wb.getSheetAt(0);
// 遍歷數據
//循環表中的條數
for(int i = 3; i < sheet.getLastRowNum()+1; i++){
//創建一個對象來裝每一條的具體內容
DrmConfirmation confirmation =new DrmConfirmation();
DrmUser u = (DrmUser) ActionContext.getContext().getSession()
.get("drmUser");
confirmation.setCreateTime(DateUtil.covertToDbTimeStamp(System.currentTimeMillis(),"yyyy-MM-dd hh:mm:ss"));
confirmation.setCreateUser(u.getUserId());
//循環每一條的具體內容
for(int j = 0; j < sheet.getRow(i).getLastCellNum(); j++){
Cell cell = sheet.getRow(i).getCell(j);
int celltype;
String result=null;
if(cell==null){
celltype=11;//為空的情況
}else{
celltype=cell.getCellType() ;//獲取字段數據類型
}
if(celltype==cell.CELL_TYPE_NUMERIC){//進行數據類型的判斷,然后進行不同的處理,要不然會報錯
double cellnum=cell.getNumericCellValue();
int cellint=(int)cellnum;
if((cellnum-cellint)>0){
result=String.valueOf(cellnum);//轉換成String方便下面賦值
}else{
result=String.valueOf(cellint);
}
}else if(celltype==11){
result="";
}else{
result=cell.getStringCellValue();
}
switch (j) {//把對應位置上的數據保存到對應對象中的字段中
case 0://客戶代號
confirmation.setCustId(result);
break;
case 1://截止時間
confirmation.setYyyymmddEnd(result);
break;
case 2://賬務中心名稱
confirmation.setBranchName(result);
break;
case 3://貴公司欠(資金往來)
if(result.equals("")||result==null){
confirmation.setAmtDebts((new BigDecimal(0)));
}else{
confirmation.setAmtDebts((new BigDecimal(result)));
}
break;
case 4://欠貴公司(資金往來)
if(result.equals("")||result==null){
confirmation.setAmtRec((new BigDecimal(0)));
}else{
confirmation.setAmtRec((new BigDecimal(result)));
}
break;
case 5://備注
confirmation.setMemoAmt(result);
break;
case 6://項目
confirmation.setProject(result);
break;
case 7://貴公司欠(費用)
if(result.equals("")||result==null){
confirmation.setCostDebts((new BigDecimal(0)));
}else{
confirmation.setCostDebts((new BigDecimal(result)));
}
break;
case 8://欠貴公司(費用)
if(result.equals("")||result==null){
confirmation.setCostRec((new BigDecimal(0)));
}else{
confirmation.setCostRec((new BigDecimal(result)));
}
break;
case 9://備注
confirmation.setMemoCost(result);
break;
case 10://庫存采集日期
confirmation.setYyyymmddStk(result);
break;
case 11://正常品
if(result.equals("")||result==null){
confirmation.setQty1I((new BigDecimal(0)));
}else{
confirmation.setQty1I((new BigDecimal(result)));
}
break;
case 12://滯銷品
if(result.equals("")||result==null){
confirmation.setQty2I((new BigDecimal(0)));
}else{
confirmation.setQty2I((new BigDecimal(result)));
}
break;
case 13://即期品
if(result.equals("")||result==null){
confirmation.setQty3I((new BigDecimal(0)));
}else{
confirmation.setQty3I((new BigDecimal(result)));
}
break;
case 14://即期品
if(result.equals("")||result==null){
confirmation.setQty4I((new BigDecimal(0)));
}else{
confirmation.setQty4I((new BigDecimal(result)));
}
break;
case 15://備注(庫存)
confirmation.setMemoStk(result);
break;
case 16://通信地址
confirmation.setAddress(result);
break;
case 17://聯系人
confirmation.setContactPerson(result);
break;
case 18://聯系人
confirmation.setZip(result);
break;
case 19://電話
confirmation.setTel(result);
break;
case 20://傳真
confirmation.setFax(result);
break;
case 21://詢證函編號
confirmation.setConfirmationId(result);
break;
case 22://落款簽名
confirmation.setInscription(result);;
break;
default:
break;
}
}
if(!confirmation.getConfirmationId().equals("")&&confirmation.getConfirmationId()!=""){
list.add(confirmation);
}
}
for(int i=0;i<list.size();i++){
confirmationDao.save(list.get(i));//把對象保存到數據中,也就是excel的一行數據
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "ok";
}
上面是我用到的第三方文件,由於無法傳附件,有需要的可以去網上下載或者找我也可以!