📄 fileuploadbean.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 + -