package cn.com.mcd.controller;
import java.io.File;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import cn.com.mcd.common.ResultModel;
import cn.com.mcd.model.FileMain;
import cn.com.mcd.service.CustemerListService;
import cn.com.mcd.util.UtilDateTime;
import cn.com.mcd.util.UtilExcelToTxt;
import cn.com.mcd.util.constans.Constants;
import cn.com.mcd.util.constans.ConstantsError;
import jxl.read.biff.BiffException;
/**
* @author soya.song
* 2017.3.16
*/
@Controller
@RequestMapping("/custemerList")
@SuppressWarnings("unused")
public class CustemerListController implements Serializable{
private static final long serialVersionUID = 2732216546553695880L;
private static final Logger log = LoggerFactory.getLogger(CustemerListController.class);
@Resource
private CustemerListService custemerListService;
static String prefix="customer_";
static String suffixTo=".txt";

/**
* 导入
* @param id
* @return
*/
@RequestMapping(value = "/uploadCustList",method = RequestMethod.POST)
@ResponseBody
public ResultModel uploadCustList(@RequestParam MultipartFile[] myfiles, HttpServletRequest request) throws IOException {
ResultModel resultModel=new ResultModel();
Map<String,Object> resultMap=new HashMap<String,Object>();
FileMain file=new FileMain();
log.info(this.getClass().getName()+".uploadCustList.start");
ResultModel result=new ResultModel();
String originalFilename="";//上传的文件的文件名

//校验上传文件上否为空
if(null==myfiles || myfiles.length<=0){
result.setResultMsg(Constants.SERVICE_ERROR_CODE);
result.setResultMsg(Constants.FILE_NULL_ERROR);
return result;
}
List<FileMain> resultList=new ArrayList<FileMain>();
int i=1;
for (MultipartFile myfile : myfiles) {
if (!myfile.isEmpty()) {
//获得文件后缀名
String suffix = myfile.getOriginalFilename().substring(myfile.getOriginalFilename().lastIndexOf("."));
//检查文件格式是否正确
if(!".lsx".equals(suffix) && !".xlsx".equals(suffix) ){
resultModel.setResultCode(ConstantsError.CHECK_EXCEL_NOT_EXIST_CODE);//cus1002
resultModel.setResultMsg(ConstantsError.CHECK_EXCEL_NOT_EXIST_MSG);//the file must be excel
return resultModel;
}

//获得文件源名
originalFilename=myfile.getOriginalFilename();

//转为File
String path=request.getSession().getServletContext().getRealPath("/file/upload/");//生成一个目录
String uuid=prefix+UtilDateTime.nowDateToString();//customer_YYYYMMDDHHMM 
String fileName = uuid+ suffix; //文件全路径
String txtName = uuid+ suffixTo; //txt文件名(customer_YYYYMMDDHHMM.txt(时间为24小时制))
File f=new File(path,fileName);

//如果path路径不存在,创建一个文件夹
if(!f.exists()){
f.mkdirs();
}
try {
myfile.transferTo(f);//没有这句话,生成的文件就是一个文件夹。有了以后,就会在path路径下,生成一个文件
//1.将文件信息保存到数据库
Map<String,Object> map=custemerListService.saveExcel(f);
// String flg=(String) map.get("flag") ;
// if(!"0".equals(flg)){//说明保存数据库没有成功
// if("1".equals(flg)){//说明校验失败
// result.setResultData(map);
// }
// result.setResultCode(Constants.SERVICE_ERROR_CODE);//500
// result.setResultMsg(Constants.FILE_CHECK_ERROR);//导入文件数据有误
// log.info(this.getClass().getName()+".uploadCustList.文件上传保存到数据库校验失败result:"+result);
// return result;
// }
//2.将excel文件转换为txt文件
// UtilExcelToTxt xt = UtilExcelToTxt.getInstance();
// resultMap=xt.excelToTxt(path+fileName, path,txtName);

//custemerListService
//将txt文件传入sftp

//如果导入成功一个文件,记录一次
file.setFlag("successful");//成功
//如果导入成功一个文件,记录一次
} catch (IllegalStateException | IOException e) {
file.setFlag("failure");//成功
log.error(this.getClass().getName()+".uploadCustList.end.上传excel文件controller报错",e);
// throw new DataBaseAccessException(5001+Constants.FILE_UPLOAD_ERROR+e);//excel文件导入失败
}
//如果导入成功一个文件,记录一次
file.setName(fileName);
file.setNum(i);
resultList.add(file);//对象装入list
i++;
}
}
result.setResultData(resultList);
return result;
}
}

本博客中所有内容为本人自学及总结内容, 仅代表个人观点,如有错误,麻烦大家及时指出并提示我更正。谢谢
 

springmvc文件上传 参数为MultipartFile 转换为File的更多相关文章

  1. SpringMVC文件上传下载(单文件、多文件)

    前言 大家好,我是bigsai,今天我们学习Springmvc的文件上传下载. 文件上传和下载是互联网web应用非常重要的组成部分,它是信息交互传输的重要渠道之一.你可能经常在网页上传下载文件,你可能 ...

  2. SpringMVC文件上传 Excle文件 Poi解析 验证 去重 并批量导入 MYSQL数据库

    SpringMVC文件上传 Excle文件 Poi解析并批量导入 MYSQL数据库  /** * 业务需求说明: * 1 批量导入成员 并且 自主创建账号 * 2 校验数据格式 且 重复导入提示 已被 ...

  3. 18 SpringMVC 文件上传和异常处理

    1.文件上传的必要前提 (1)form 表单的 enctype 取值必须是:multipart/form-data(默认值是:application/x-www-form-urlencoded) en ...

  4. springmvc文件上传AND jwt身份验证

    SpringMVC文件上传 思路:1.首先定义页面,定义多功能表单(enctype=“multipart/form-data”)2.在Controller里面定义一个方法,用参数(MultipartF ...

  5. TZ_06_SpringMVC_传统文件上传和SpringMVC文件上传方式

    1.传统文件上传方式 <!-- 文件上传需要的jar --> <dependency> <groupId>commons-fileupload</groupI ...

  6. springmvc文件上传下载简单实现案例(ssm框架使用)

    springmvc文件上传下载实现起来非常简单,此springmvc上传下载案例适合已经搭建好的ssm框架(spring+springmvc+mybatis)使用,ssm框架项目的搭建我相信你们已经搭 ...

  7. springMVC文件上传大小超过限制的问题

    [转自]https://my.oschina.net/ironwill/blog/646762 springMVC是一个非常方便的web层框架,我们使用它的文件上传也非常的方便. 我们通过下面的配置来 ...

  8. 解决springMVC文件上传报错: The current request is not a multipart request

    转自:https://blog.csdn.net/HaHa_Sir/article/details/79131607 解决springMVC文件上传报错: The current request is ...

  9. SpringMVC——文件上传下载

    一.单文件上传 1.导入依赖 <dependency> <groupId>commons-io</groupId> <artifactId>common ...

随机推荐

  1. EM 算法(三)-GMM

    高斯混合模型 混合模型,顾名思义就是几个概率分布密度混合在一起,而高斯混合模型是最常见的混合模型: GMM,全称 Gaussian Mixture Model,中文名高斯混合模型,也就是由多个高斯分布 ...

  2. Robot Framework(二)访问数据库

    1.在Test suit中添加Library 直接输入库名,点击确定即可 DatabaseLibrary BuiltIn 2.在用例中,连接数据库,并执行sql Connect To Database ...

  3. Codeforces 1196D2. RGB Substring (hard version)

    传送门 考虑枚举每一个位置作为可能子段的起点,然后对以这个位置为起点的所有情况下的答案取 $min$ 当固定了起点 $i$ 并且固定了起点 $i$ 最终的字符时,答案也固定了 发现对于所有与 $i \ ...

  4. Neo4j/Cypher: All paths between two nodes with a relationship property filter

    解决方案一 I am trying to perform a query to retrieve all paths between two nodes a and b in which all th ...

  5. js注册实现

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. 笔记本电脑重装win7/win10系统教程

    由于笔记本第一次重装系统会出现系统装不上,还有出现找不到有效硬盘分区,等等问题,然后这篇文章主要讲解BIOS设置的方法,用此BIOS设置,电脑用原本安装系统的方式,能有效地解决以上问题,这有两种方法解 ...

  7. echarts图表数据信息动态获取

    第一步准备一个json文件echarts.json(名字无所谓),用来模拟从后台获取数据 { "name":["直达","营销广告",&qu ...

  8. Vue路由守卫之组件内路由守卫

    ​        beforeRouteEnter,进入路由前.需要注意这里不能使用this,因为我们使用的是进入路由之前,那会组件还没创建,得不到this这个属性,所有我们只能使用过vm异步语句来让 ...

  9. Linux——Session复制中的失败的可能原因之一

    组播地址问题 route add -net 224.0.0.0 netmask 240.0.0.0 dev eno16777728(自己的网卡名)

  10. oracle删除临时表空间一直处于等待状态

    现象: 新建一个临时表空间mytemp 然后将其改为默认临时表空间后,执行一条带order by的查询语句,查询出结构后, 修改默认临时表空间为原来的temp,然后执行 drop tablespace ...