【功能】:前台上传文件(txt,xls,xlsx,csv,pdf)五种格式的文件 后台java解析文件,并且判断文件内容是否为零字节

描述:前台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" οnchange="opt(this)" name="file">
<input type="button" class="btn-main002 search-marginleft3per" οnclick="newfile()" value="選択"/>
<input type="button" id="btn_fileExec" value="プロファイル実行" class="btn-main001" οnclick="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";
	}
	
}
发布了91 篇原创文章 · 获赞 14 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/Abenazhan/article/details/103740590