⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fileuploadbean.java

📁 使用spring ,hibernate 框架的稽查管理系统
💻 JAVA
字号:
package com.je.ims.util;
import java.io.*; 
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
   
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.ServletInputStream; 
import javax.servlet.ServletException;


import com.je.ims.dao.FileManagerDao;
import com.je.ims.hibernate.FileManager;
import com.sun.org.apache.xalan.internal.xsltc.runtime.Hashtable;

public class FileUploadBean{ 
//private static String newline = "\r\n"; //设定换行符

private String uploadDirectory ="d:/upload/"; //默认的保存位置

String[] Type={"doc","rtf","xls","pps","ppt","txt","pdf"};
private String ContentType = ""; //文件类型
private String CharacterEncoding = ""; //编码格式
private FileManagerDao filemanagerdao=new FileManagerDao();
public void setfilemanagerdao(FileManagerDao c1)
{
	filemanagerdao=c1;
}
public FileManagerDao getfilemanagedao() {
	return filemanagerdao;
}
private Hashtable fields; 
String fileid;
List FileID=new ArrayList();
List filemanager=new ArrayList();
public List getfileid(){
	return FileID;
}
public List getfilemanager(){
	return filemanager;
}
public String getParameter(String fieldName) { 
	//取得相应变量
	if (fields == null || fieldName == null) 
	return null; 
	return (String) fields.get(fieldName); 
	} 



public void setFilemanagerdao(FileManagerDao c1)
{
	filemanagerdao=c1;
}

//设定文件要保存在服务器中的位置
public void setUploadDirectory(String s){ 
//设置上传文件保存路径,调用时需先设置上传路径,然后调用uploadFile(request)函数,可以不设置则保存到默认路径
uploadDirectory = s; 
} 
//提取完整文件名(example:1.txt)
private String getFileName(String s){ 
int i = s.lastIndexOf("\\"); 
if(i < 0 || i >= s.length() - 1){ 
i = s.lastIndexOf("/"); 
if(i < 0 || i >= s.length() - 1) 
return s; 
} 
return s.substring(i + 1); 
}
private String getFilecName(String s){
	{
		String s1 = new String();
		int i = 0;
		
		if(s == null)
		return null;
		i = s.lastIndexOf(46);
		
		s1 = s.substring(0, i);
		if(s.lastIndexOf(46) > 0)
		return s1;
		else
		return "";
		}
	
}

private String getFileType(String s){
	{
		String s1 = new String();
		int i = 0;
		int j = 0;
		if(s == null)
		return null;
		i = s.lastIndexOf(46) + 1;
		j = s.length();
		s1 = s.substring(i, j);
		if(s.lastIndexOf(46) > 0)
		return s1;
		else
		return "";
		}
}

//得到content-type
public void setContentType(String s){ 
ContentType = s; 
int j; 
if((j = ContentType.indexOf("boundary=")) != -1){ 
ContentType = ContentType.substring(j + 9); 
ContentType = "--" + ContentType; 
} 
} 
//得到文件编码格式
public void setCharacterEncoding(String s){ 
	//设置编码方式(ms950)
CharacterEncoding = s; 
} 



public void init1( HttpServletRequest req) throws ServletException, IOException{ 
//	初始化函数,实现文件上传和将所有表单名值对存到hash表中(存file表时部分需传送变量为空,需调用uploadfile函数修改)
	setCharacterEncoding("MS950"); 
	req.setCharacterEncoding("ms950");
	setContentType(req.getContentType()); 
	ServletInputStream servletinputstream=req.getInputStream();
	FileID.clear();
	filemanager.clear();


//	具体实现上传功能


	String filename = null; 
	String filecname=null;
	String filetype=null;
	
	byte Linebyte[] = new byte[4096]; 
	
	int ai[] = new int[1]; 
	
	String line; 

	String boundary =readLine(Linebyte, ai, servletinputstream, CharacterEncoding);
	boundary=boundary.substring(0,boundary.length()-2);
	
	fields = new Hashtable(); 

	while((line = readLine(Linebyte, ai, servletinputstream, CharacterEncoding)) != null){
		if (line.startsWith("Content-Disposition: form-data; name=")) {
			int i;
			if ((i=line.indexOf("filename=") )!= -1) { 
				//实现上传
				 
				if(i >= 0){ 
				line = line.substring(i + 10); 
				if((i = line.indexOf("\"")) > 0) 
				line = line.substring(0, i); 
				
				} 
			

				filename = line; 

				if((filename != null) && (filename.length()>3)){ 
				filename = getFileName(filename); 
				filecname=getFilecName(filename);
				filetype=getFileType(filename);
				boolean bool=false;
				for(int m=0;m<Type.length;m++){
					if(filetype.equals(Type[m])){bool=true;break;}
				}
				if(!bool){
					throw new IOException(filetype+": wrong type");

				}
				Date date=new Date();
				FileManager c1=null;
				 c1=new FileManager( "null",  filecname,  filetype,  uploadDirectory,  "null", new Long(0),  "null",  "null",  "null",  date);
				 String fileid=null;
				try{
				filemanagerdao.saveFile(c1);
				fileid=c1.getFileId().toString();
		
					FileID.add(fileid);
					filemanager.add(c1);}
				catch(Exception e){}
				

				String sContentType = readLine(Linebyte, ai, servletinputstream, CharacterEncoding); 
				if(sContentType.indexOf("Content-Type") >= 0) 
				readLine(Linebyte, ai, servletinputstream, CharacterEncoding); 

//				建立新文件的文件句柄 

				java.io.File file = new java.io.File(uploadDirectory, fileid+"."+filetype); 

//				建立生成新文件的输出流 
				FileOutputStream fileoutputstream = new FileOutputStream(file); 

				while((sContentType = readLine(Linebyte, ai, servletinputstream, CharacterEncoding)).indexOf(boundary)==-1 ){ 
				
				fileoutputstream.write(Linebyte, 0, ai[0]); 
				fileoutputstream.flush(); 
				} 

				
				fileoutputstream.close(); 
				}
				//else{
					
			//	}
				
			}	
			else{
//				 普通表单输入元素 
//				 获取输入元素名字 
				int pos = line.indexOf("name="); 
				String fieldName = line.substring(pos+6,line.length()-3); 
				
				//line = readLine(Linebyte, ai, servletinputstream, CharacterEncoding);
				line = readLine(Linebyte, ai, servletinputstream, CharacterEncoding);
				StringBuffer fieldvalue = new StringBuffer(1024); 
				while (!line.startsWith(boundary)) { 
//				 最后一行包含换行字符 
//				 因此我们必须检查当前行是否是最后一行 
				
				fieldvalue.append(line.substring(0,line.length()-2)); 
				line = readLine(Linebyte, ai, servletinputstream, CharacterEncoding);
				} 

				fields.put(fieldName, fieldvalue.toString());

				} 
				} 			
			}
			}
public FileManager init( HttpServletRequest req) throws ServletException, IOException{ 
//	初始化函数,实现文件上传和将所有表单名值对存到hash表中(存file表时部分需传送变量为空,需调用uploadfile函数修改)
	setCharacterEncoding("MS950"); 
	req.setCharacterEncoding("ms950");
	setContentType(req.getContentType()); 
	ServletInputStream servletinputstream=req.getInputStream();
	 


//	具体实现上传功能

	String s5 = null; 
	String filename = null; 
	String filecname=null;
	String filetype=null;
	byte Linebyte[] = new byte[4096]; 
	byte outLinebyte[] = new byte[4096]; 
	int ai[] = new int[1]; 
	int ai1[] = new int[1]; 

	String line; 
//	得到文件名 
	String boundary =readLine(Linebyte, ai, servletinputstream, CharacterEncoding);
	fields = new Hashtable(); 

	while((line = readLine(Linebyte, ai, servletinputstream, CharacterEncoding)) != null){
		if (line.startsWith("Content-Disposition: form-data; name=")) {
			int i;
			if ((i=line.indexOf("filename=") )!= -1) { 
				//实现上传
				 
				if(i >= 0){ 
				line = line.substring(i + 10); 
				if((i = line.indexOf("\"")) > 0) 
				line = line.substring(0, i); 
				
				} 
			

				filename = line; 

				if(filename != null && !filename.equals("\"")){ 
				filename = getFileName(filename); 
				filecname=getFilecName(filename);
				filetype=getFileType(filename);
				Date date=new Date();
				FileManager c1=new FileManager( "error",  filecname,  filetype,  uploadDirectory,  "error", new Long(0),  "error",  "error",  "error",  date);
				filemanagerdao.saveFile(c1);
				String fileid=c1.getFileId().toString();


				String sContentType = readLine(Linebyte, ai, servletinputstream, CharacterEncoding); 
				if(sContentType.indexOf("Content-Type") >= 0) 
				readLine(Linebyte, ai, servletinputstream, CharacterEncoding); 

//				建立新文件的文件句柄 

				java.io.File file = new java.io.File(uploadDirectory, fileid+"."+filetype); 

//				建立生成新文件的输出流 
				FileOutputStream fileoutputstream = new FileOutputStream(file); 

				while((sContentType = readLine(Linebyte, ai, servletinputstream, CharacterEncoding)) != null){ 
				if(sContentType.indexOf(ContentType) == 0 && Linebyte[0] == 45) 
				break; 

				if(s5 != null){ 
//				写入新文件
				fileoutputstream.write(outLinebyte, 0, ai1[0]); 
				fileoutputstream.flush(); 
				} 
				s5 = readLine(outLinebyte, ai1, servletinputstream, CharacterEncoding); 
				if(s5 == null || s5.indexOf(ContentType) == 0 && outLinebyte[0] == 45) 
				break; 
				fileoutputstream.write(Linebyte, 0, ai[0]); 
				fileoutputstream.flush(); 
				} 

				
				return c1;
				}
				
			}	
			else{
//				 普通表单输入元素 
//				 获取输入元素名字 
				int pos = line.indexOf("name="); 
				String fieldName = line.substring(pos+6,line.length()-3); 
				
				//line = readLine(Linebyte, ai, servletinputstream, CharacterEncoding);
				line = readLine(Linebyte, ai, servletinputstream, CharacterEncoding);
				StringBuffer fieldvalue = new StringBuffer(1024); 
				while (line!=null && !line.startsWith(boundary)) { 
//				 最后一行包含换行字符 
//				 因此我们必须检查当前行是否是最后一行 
				
				fieldvalue.append(line.substring(0,line.length()-2)); 
				line = readLine(Linebyte, ai, servletinputstream, CharacterEncoding);
				} 

				fields.put(fieldName, fieldvalue.toString());

				} 
				} 			
			}
	return null;
			}

/*	public String init2( HttpServletRequest req) throws ServletException, IOException{ 
//		初始化函数,实现文件上传和将所有表单名值对存到hash表中(存file表时部分需传送变量为空,需调用uploadfile函数修改)
		setCharacterEncoding("MS950"); 
		req.setCharacterEncoding("ms950");
		setContentType(req.getContentType()); 
		ServletInputStream servletinputstream=req.getInputStream();
		 


//		具体实现上传功能

		String s5 = null; 
		String filename = null; 
		String filecname=null;
		String filetype=null;
		byte Linebyte[] = new byte[4096]; 
		byte outLinebyte[] = new byte[4096]; 
		int ai[] = new int[1]; 
		int ai1[] = new int[1]; 

		String line; 
//		得到文件名 
		String boundary =readLine(Linebyte, ai, servletinputstream, CharacterEncoding);
		fields = new Hashtable(); 

		while((line = readLine(Linebyte, ai, servletinputstream, CharacterEncoding)) != null){
			if (line.startsWith("Content-Disposition: form-data; name=")) {
				int i;
				if ((i=line.indexOf("filename=") )!= -1) { 
					//实现上传
					 
					if(i >= 0){ 
					line = line.substring(i + 10); 
					if((i = line.indexOf("\"")) > 0) 
					line = line.substring(0, i); 
					
					} 
				

					filename = line; 

					if(filename != null && !filename.equals("\"")){ 
					filename = getFileName(filename); 
					filecname=getFilecName(filename);
					filetype=getFileType(filename);
					Date date=new Date();
					FileManager c1=new FileManager( "error",  filecname,  filetype,  uploadDirectory,  "error", new Long(0),  "error",  "error",  "error",  date);
					filemanagerdao.saveFile(c1);
					String fileid=c1.getFileId().toString();


					String sContentType = readLine(Linebyte, ai, servletinputstream, CharacterEncoding); 
					if(sContentType.indexOf("Content-Type") >= 0) 
					readLine(Linebyte, ai, servletinputstream, CharacterEncoding); 

//					建立新文件的文件句柄 

					java.io.File file = new java.io.File(uploadDirectory, fileid+"."+filetype); 

//					建立生成新文件的输出流 
					FileOutputStream fileoutputstream = new FileOutputStream(file); 

					while((sContentType = readLine(Linebyte, ai, servletinputstream, CharacterEncoding)) != null){ 
					if(sContentType.indexOf(ContentType) == 0 && Linebyte[0] == 45) 
					break; 

					if(s5 != null){ 
//					写入新文件
					fileoutputstream.write(outLinebyte, 0, ai1[0]); 
					fileoutputstream.flush(); 
					} 
					s5 = readLine(outLinebyte, ai1, servletinputstream, CharacterEncoding); 
					if(s5 == null || s5.indexOf(ContentType) == 0 && outLinebyte[0] == 45) 
					break; 
					fileoutputstream.write(Linebyte, 0, ai[0]); 
					fileoutputstream.flush(); 
					} 
					
					fileoutputstream.close(); 
					}
					
				}	
				else{
//					 普通表单输入元素 
//					 获取输入元素名字 
					int pos = line.indexOf("name="); 
					String fieldName = line.substring(pos+6,line.length()-3); 
					
					//line = readLine(Linebyte, ai, servletinputstream, CharacterEncoding);
					line = readLine(Linebyte, ai, servletinputstream, CharacterEncoding);
					StringBuffer fieldvalue = new StringBuffer(1024); 
					while (line!=null && !line.startsWith(boundary)) { 
//					 最后一行包含换行字符 
//					 因此我们必须检查当前行是否是最后一行 
					
					fieldvalue.append(line.substring(0,line.length()-2)); 
					line = readLine(Linebyte, ai, servletinputstream, CharacterEncoding);
					} 

					fields.put(fieldName, fieldvalue.toString());

					} 
					} 			
				}
		         return fileid;
				}
*/
public void uploadfile(Long fileid,String fileDoc, String  appId, String  userId, String userName, String userUnit){
	filemanagerdao.updateFile(fileid, fileDoc,   appId,  userId, userName,  userUnit);
}	
	
	
	
	
	

//readLine函数把表单提交上来的数据按行读取
private String readLine(byte Linebyte[], int ai[],ServletInputStream servletinputstream,String CharacterEncoding){ 
try{ //读取一行
ai[0] = servletinputstream.readLine(Linebyte, 0, Linebyte.length); 
if(ai[0] == -1) 
return null; 
}catch(IOException ex){ 
return null; 
} 
try{ 
if(CharacterEncoding == null){ 
//用默认的编码方式把给定的byte数组转换为字符串 
return new String(Linebyte, 0, ai[0]); 
}else{ 
//用给定的编码方式把给定的byte数组转换为字符串 
return new String(Linebyte, 0, ai[0], CharacterEncoding); 

} 
}catch(Exception ex){ 
return null; 
} 
} 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -