描述:前台html上传文件到后台解析文件。文件类型有txt,xls,xlsx,csv,pdf这五种类型,并且要判断文件内容是否为空,就是有文件,但是文件内容的字节为零。
首先先配置需要maven依赖。
pom.xml文件:
文件需要配置文件上传和解析文件的maven依赖
<!-- File upload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<!-- 解析文件 -->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.16</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.16</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.16</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.16</version>
</dependency>
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>net.sf.cssbox</groupId>
<artifactId>pdf2dom</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.12</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox-tools</artifactId>
<version>2.0.12</version>
</dependency>
<dependency>
<groupId>net.sourceforge.javacsv</groupId>
<artifactId>javacsv</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.15</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.pdfbox/fontbox -->
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>fontbox</artifactId>
<version>2.0.15</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.pdfbox/jempbox -->
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>jempbox</artifactId>
<version>1.8.16</version>
</dependency>
<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls-jexcel</artifactId>
<version>1.0.6</version>
</dependency>
mvc-dispatcher-servlet.xml文件:
需要加上<beans:property name="maxInMemorySize" value="0"></beans:property> 否则上传文件会报空指针错误。
<!-- 文件上传 -->
<beans:bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设定默认编码 -->
<beans:property name="defaultEncoding" value="UTF-8"></beans:property>
<!-- 设定文件上传的最大值5MB,5*1024*1024 -->
<beans:property name="maxUploadSize" value="52428800"></beans:property>
<beans:property name="maxInMemorySize" value="0"></beans:property>
</beans:bean>
html:
设置一个隐藏的文件上传,另一个按钮点击的时候触发隐藏的文件上传功能。并且把文件的名字显示在文本框里。
<input type="text" class="search-input-style" id="filetext" readonly="true">
<input type="file" style="display:none;" id="NEWFILE" onchange="opt(this)" name="file">
<input type="button" class="btn-main002 search-marginleft3per" onclick="newfile()" value="選択"/>
<input type="button" id="btn_fileExec" value="プロファイル実行" class="btn-main001" onclick="implement('implement')" tabindex="6">
JS:
点击按钮触发隐藏的文件上传
function newfile()
{
document.getElementById("NEWFILE").click();
}
把文件的名字显示在文本框里面
function opt()
{
var file = document.getElementById("NEWFILE").files[0];
var ff = document.getElementById("NEWFILE").files[0].name;
$('#filetext').val(ff);
}
点击プロファイル実行把文件传给后台
function implement(modeAction)
{
checkall();
var drop1 =$("input[name='checked']:checked").val();
var file = document.getElementById("NEWFILE").files[0];
if(drop1!=null)
{
dropped(drop1);
}
nosame();
if(file!=null && (obj.nosamesign=="1"))
{
eliminate();
}
if((obj.checkallsign=="1") && (obj.droppedsign=="1" || obj.droppedsign=="3") && (obj.nosamesign=="1") && (obj.eliminatesign=="1" || obj.eliminatesign=="3") && (obj.nonexistent=="1" || obj.nonexistent=="3") )
{
if(modeAction == 'implement')
{
$('#modeAction').val(modeAction);
var form = document.getElementById('DRET004Form');
form.submit();
}
}
else
{
return false;
}
}
function eliminate()
{
var file = document.getElementById("NEWFILE").files[0];
var formData=new FormData();
formData.append("file",file);
$.ajax({
url: "/piosys/DRET004ELIMINATE",
dataType:"json",
type: "POST",
data: formData,
async: false,
enctype: 'multipart/form-data',
cache: false,
processData: false,
contentType: false,
success: function (data) {
if(data=="0")
{
obj.eliminatesign="0";
obj.nonexistent="0";
alert("文件不存在");
}
else if(data=="2")
{
obj.eliminatesign="1";
obj.nonexistent="0";
alert("指定的文件为0字节");
}
else
{
obj.eliminatesign="1";
obj.nonexistent="1";
}
},
error:function (data) {
obj.eliminatesign="0";
alert("文件不存在");
}
});
}
controller:
判断文件是否为空,文件内容是否为零字节
//检查用户简档的文件是否存在,并且检查文件内容是否为空
@ResponseBody()
@RequestMapping("/DRET004ELIMINATE")
public String elimate(MultipartFile multipartFile,HttpServletRequest request,HttpServletResponse response) throws IOException
{
//把requesr转化成MultipartHttpServletRequest
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request;
//获取前端传的文件
MultipartFile file = multiRequest.getFile("file");
//获取文件名字
String filename = file.getOriginalFilename();
//获取后缀名
String suffix = filename.substring(filename.lastIndexOf(".") + 1);
//把MultipartFile转化成File
CommonsMultipartFile cf= (CommonsMultipartFile)file;
DiskFileItem fi =(DiskFileItem)cf.getFileItem();
File f = fi.getStoreLocation();
//0表示文件不存在 ,1表示文件存在并且文件不为空,2表示文件存在但是文件为空
String files = null;
if(file==null) {
files="0";
return files;
}
else {
if(suffix.equals("txt")) {
if(file.isEmpty())
{
files="2";
return files;
}
else {
files="1";
return files;
}
}
else if (suffix.equals("xls") || suffix.equals("xlsx")) {
InputStream is = new FileInputStream(f);
if(suffix.equals("xls")) {
HSSFWorkbook wb = new HSSFWorkbook(is);
for(int sheetIndex=0;sheetIndex<wb.getNumberOfSheets();sheetIndex++)
{
HSSFSheet st = wb.getSheetAt(sheetIndex);
if(st==null)
{
files="2";
return files;
}
for(int rowIndex =0;rowIndex<=st.getLastRowNum();rowIndex++)
{
HSSFRow row = st.getRow(rowIndex);
if(row==null)
{
files="2";
return files;
}
else {
files="1";
return files;
}
}
}
is.close();
}
else {
XSSFWorkbook wb = new XSSFWorkbook(is);
for(int sheetIndex=0;sheetIndex<wb.getNumberOfSheets();sheetIndex++)
{
XSSFSheet st = wb.getSheetAt(sheetIndex);
if(st==null)
{
files="2";
return files;
}
for(int rowIndex =0;rowIndex<=st.getLastRowNum();rowIndex++)
{
XSSFRow row = st.getRow(rowIndex);
if(row==null)
{
files="2";
return files;
}
else {
files="1";
return files;
}
}
}
is.close();
}
}
else if (suffix.equals("csv")) {
CsvReader csvReader = new CsvReader(new FileInputStream(f), ',', Charset.forName("UTF-8"));
if (csvReader.readRecord())
{
files="1";
return files;
}
else
{
files="2";
return files;
}
}
else if (suffix.equals("pdf")) {
FileInputStream in = new FileInputStream(f);
PDFParser parser = new PDFParser(new RandomAccessFile(f,"rw"));
parser.parse();
PDDocument pdfdocument = parser.getPDDocument();
PDFTextStripper stripper = new PDFTextStripper();
String result = stripper.getText(pdfdocument);
String newresult = result.replaceAll("\t|\r|\n","");
String newresult1 = newresult.trim();
in.close();
if(newresult1==null || newresult1=="" || newresult1.isEmpty() || "".equals(newresult1))
{
files="2";
return files;
}
else {
System.out.println(stripper.getText(pdfdocument));
files="1";
return files;
}
}
else {
files="0";
return files;
}
}
return files;
}
controller:
解析文件
@RequestMapping(value="/DRET004UPLOAD")
public String dreg004uoload(DRET004Form form, /* MultipartFile multipartFiles, */HttpServletRequest request) throws IOException, BiffException {
//方法区分
String modeAction = form.getModeAction();
//单选按钮的id
String checked = form.getChecked();
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request;
MultipartFile file = multiRequest.getFile("file");
String filename = file.getOriginalFilename();
String suffix = filename.substring(filename.lastIndexOf(".") + 1);
CommonsMultipartFile cf= (CommonsMultipartFile)file;
DiskFileItem fi =(DiskFileItem)cf.getFileItem();
File f = fi.getStoreLocation();
//统计数量
int linenumber = 0;
if(file!=null)
{
if(suffix.equals("txt"))
{
//读取文件所有内容
InputStreamReader read = new InputStreamReader(new FileInputStream(f),"UTF-8");
BufferedReader bufferedReader = new BufferedReader(read);
String lineTxt = "";
String AlartTxt="";
while((lineTxt = bufferedReader.readLine()) != null){
lineTxt+='\n';
AlartTxt+=lineTxt;
}
System.out.println(AlartTxt);
read.close();
//读取行数统计数量
FileReader fr = new FileReader(f);
LineNumberReader lnr = new LineNumberReader(fr);
while (lnr.readLine() != null){
linenumber++;
}
System.out.println(linenumber-3);
lnr.close();
}
else if(suffix.equals("xlsx") || suffix.equals("xls"))
{
/* BufferedInputStream in = new BufferedInputStream(new FileInputStream(f)); */
InputStream is = new FileInputStream(f);
/* POIFSFileSystem fs = new POIFSFileSystem(in); */
if(suffix.equals("xlsx"))
{
XSSFWorkbook wb = new XSSFWorkbook(is);
for(int sheetIndex=0;sheetIndex<wb.getNumberOfSheets();sheetIndex++)
{
XSSFSheet st = wb.getSheetAt(sheetIndex);
if(st==null)
{
break;
}
for(int rowIndex =0;rowIndex<=st.getLastRowNum();rowIndex++)
{
XSSFRow row = st.getRow(rowIndex);
if(row==null)
{
break;
}
int firstCellIndex = row.getFirstCellNum();
int lastCellIndex = row.getLastCellNum();
for(int cIndex = firstCellIndex; cIndex < lastCellIndex; cIndex++)
{
Cell cell = row.getCell(cIndex);
if (cell != null) {
System.out.print(cell.toString());
}
}
System.out.println();
}
}
Sheet sheet = wb.getSheetAt(0);
int begin = sheet.getFirstRowNum();
int end = sheet.getLastRowNum();
linenumber =end-begin;
System.out.println(linenumber);
is.close();
}
else {
HSSFWorkbook wb = new HSSFWorkbook(is);
for(int sheetIndex=0;sheetIndex<wb.getNumberOfSheets();sheetIndex++)
{
HSSFSheet st = wb.getSheetAt(sheetIndex);
if(st==null)
{
break;
}
for(int rowIndex =0;rowIndex<=st.getLastRowNum();rowIndex++)
{
HSSFRow row = st.getRow(rowIndex);
if(row==null)
{
break;
}
int firstCellIndex = row.getFirstCellNum();
int lastCellIndex = row.getLastCellNum();
for(int cIndex = firstCellIndex; cIndex < lastCellIndex; cIndex++)
{
Cell cell = row.getCell(cIndex);
if (cell != null) {
System.out.print(cell.toString());
}
}
System.out.println();
}
}
Sheet sheet = wb.getSheetAt(0);
int begin = sheet.getFirstRowNum();
int end = sheet.getLastRowNum();
linenumber =end-begin;
System.out.println(linenumber);
is.close();
/* XSSFWorkbook wb = new XSSFWorkbook(fs); */
}
}
else if(suffix.equals("csv"))
{
CsvReader csvReader = new CsvReader(new FileInputStream(f), ',', Charset.forName("UTF-8"));
/* csvReader.readHeaders(); */
while (csvReader.readRecord())
{
for (int i = 0; i <= csvReader.getColumnCount(); i++) {
String aa=csvReader.get(i);
System.out.println(aa);
}
/* System.out.print(csvReader.get(0)); */
}
}
else if(suffix.equals("pdf"))
{
FileInputStream in = new FileInputStream(f);
PDFParser parser = new PDFParser(new RandomAccessFile(f,"rw"));
parser.parse();
PDDocument pdfdocument = parser.getPDDocument();
PDFTextStripper stripper = new PDFTextStripper();
String result = stripper.getText(pdfdocument);
in.close();
System.out.println(result);
}
else {
System.out.println("啥也不是");
}
}
else {
System.out.println("无文件");
}
return "DRET011";
}
}