?? smartupload.java
字號:
// Decompiled by Jad v1.5.7g. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi
// Source File Name: SmartUpload.java
package com.westerasoft.util.jspsmart.upload;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
// Referenced classes of package com.jspsmart.upload:
// Files, Request, SmartUploadException, File
public class SmartUpload{
public byte m_binArray[];
protected HttpServletRequest m_request;
protected HttpServletResponse m_response;
protected ServletContext m_application;
private int m_totalBytes;
private int m_currentIndex;
private int m_startData;
private int m_endData;
private String m_boundary;
private long m_totalMaxFileSize;
private long m_maxFileSize;
private Vector m_deniedFilesList;
private Vector m_allowedFilesList;
private boolean m_denyPhysicalPath;
private boolean m_forcePhysicalPath;
private String m_contentDisposition;
public static final int SAVE_AUTO=0;
public static final int SAVE_VIRTUAL=1;
public static final int SAVE_PHYSICAL=2;
private Files m_files;
private Request m_formRequest;
public SmartUpload(){
m_totalBytes=0;
m_currentIndex=0;
m_startData=0;
m_endData=0;
m_boundary=new String();
m_totalMaxFileSize=0L;
m_maxFileSize=0L;
m_deniedFilesList=new Vector();
m_allowedFilesList=new Vector();
m_denyPhysicalPath=false;
m_forcePhysicalPath=false;
m_contentDisposition=new String();
m_files=new Files();
m_formRequest=new Request();
}
public final void init(ServletConfig config) throws ServletException{
m_application=config.getServletContext();
}
public final void initialize(ServletConfig config,HttpServletRequest request,
HttpServletResponse response) throws
ServletException{
m_application=config.getServletContext();
m_request=request;
m_response=response;
}
public void service(HttpServletRequest request,HttpServletResponse response) throws
IOException,ServletException{
m_request=request;
m_response=response;
}
public final void initialize(PageContext pageContext) throws ServletException{
m_application=pageContext.getServletContext();
m_request=(HttpServletRequest)pageContext.getRequest();
m_response=(HttpServletResponse)pageContext.getResponse();
}
public final void initialize(ServletContext application,HttpSession session,
HttpServletRequest request,
HttpServletResponse response,JspWriter out) throws
ServletException{
m_application=application;
m_request=request;
m_response=response;
}
public void upload() throws SmartUploadException,IOException,
ServletException{
int totalRead=0;
int readBytes=0;
long totalFileSize=0L;
boolean found=false;
String dataHeader=new String();
String fieldName=new String();
String fileName=new String();
String fileExt=new String();
String filePathName=new String();
String contentType=new String();
String contentDisp=new String();
String typeMIME=new String();
String subTypeMIME=new String();
boolean isFile=false;
m_totalBytes=m_request.getContentLength();
if(m_totalMaxFileSize>0&&m_totalMaxFileSize<m_totalBytes){
throw new SmartUploadException("上傳文件太大,請重新選擇! (1110).");
}
m_binArray=new byte[m_totalBytes];
for(;totalRead<m_totalBytes;totalRead+=readBytes){
try{
m_request.getInputStream();
readBytes=m_request.getInputStream().read(m_binArray,totalRead,
m_totalBytes-totalRead);
} catch(Exception e){
throw new SmartUploadException("上傳文件失敗,請重試!");
}
}
for(;!found&&m_currentIndex<m_totalBytes;m_currentIndex++){
if(m_binArray[m_currentIndex]==13){
found=true;
} else{
m_boundary=m_boundary+(char)m_binArray[m_currentIndex];
}
}
if(m_currentIndex==1){
return;
}
m_currentIndex++;
do{
if(m_currentIndex>=m_totalBytes){
break;
}
dataHeader=getDataHeader();
m_currentIndex=m_currentIndex+2;
isFile=dataHeader.indexOf("filename")>0;
fieldName=getDataFieldValue(dataHeader,"name");
if(isFile){
filePathName=getDataFieldValue(dataHeader,"filename");
fileName=getFileName(filePathName);
fileExt=getFileExt(fileName);
contentType=getContentType(dataHeader);
contentDisp=getContentDisp(dataHeader);
typeMIME=getTypeMIME(contentType);
subTypeMIME=getSubTypeMIME(contentType);
}
getDataSection();
if(isFile&&fileName.length()>0){
fileExt=fileExt.toLowerCase();
if(m_deniedFilesList.contains(fileExt)){
throw new SmartUploadException(
"上傳文件失敗,文件類型不支持! (1015).");
}
if(!m_allowedFilesList.isEmpty()&&
!m_allowedFilesList.contains(fileExt)){
throw new SmartUploadException(
"上傳文件失敗,文件類型不支持! (1010).");
}
if(m_maxFileSize>(long)0&&
(long)((m_endData-m_startData)+1)>m_maxFileSize){
throw new SmartUploadException(String.valueOf((new StringBuffer(
"上傳文件失敗,文件太大: ")).append(fileName).append(
" (1105).")));
}
totalFileSize+=(m_endData-m_startData)+1;
if(m_totalMaxFileSize>(long)0&&totalFileSize>m_totalMaxFileSize){
throw new SmartUploadException("上傳文件太大,請重新選擇! (1110).");
}
if(totalFileSize<1){
throw new SmartUploadException("上傳文件沒有內容,請重新選擇! (1110).");
}
}
if(isFile){
com.westerasoft.util.jspsmart.upload.File newFile=new com.westerasoft.
util.
jspsmart.upload.File();
newFile.setParent(this);
newFile.setFieldName(fieldName);
newFile.setFileName(fileName);
newFile.setFileExt(fileExt);
newFile.setFilePathName(filePathName);
newFile.setIsMissing(filePathName.length()==0);
newFile.setContentType(contentType);
newFile.setContentDisp(contentDisp);
newFile.setTypeMIME(typeMIME);
newFile.setSubTypeMIME(subTypeMIME);
if(contentType.indexOf("application/x-macbinary")>0){
m_startData=m_startData+128;
}
newFile.setSize((m_endData-m_startData)+1);
newFile.setStartData(m_startData);
newFile.setEndData(m_endData);
m_files.addFile(newFile);
} else{
String value=new String(m_binArray,m_startData,
(m_endData-m_startData)+1);
m_formRequest.putParameter(fieldName,value);
}
if((char)m_binArray[m_currentIndex+1]=='-'){
break;
}
m_currentIndex=m_currentIndex+2;
} while(true);
}
public int save(String destPathName) throws SmartUploadException,IOException,
ServletException{
return save(destPathName,0);
}
public int save(String destPathName,int option) throws SmartUploadException,
IOException,ServletException{
int count=0;
if(destPathName==null){
destPathName=m_application.getRealPath("/");
}
if(destPathName.indexOf("/")!=-1){
if(destPathName.charAt(destPathName.length()-1)!='/'){
destPathName=String.valueOf(destPathName).concat("/");
}
} else{
if(destPathName.charAt(destPathName.length()-1)!='\\'){
destPathName=String.valueOf(destPathName).concat("\\");
}
}
for(int i=0;i<m_files.getCount();i++){
if(!m_files.getFile(i).isMissing()){
m_files.getFile(i).saveAs(destPathName+m_files.getFile(i).getFileName(),
option);
count++;
}
}
return count;
}
public int getSize(){
return m_totalBytes;
}
public byte getBinaryData(int index){
byte retval;
try{
retval=m_binArray[index];
} catch(Exception e){
throw new ArrayIndexOutOfBoundsException("Index out of range (1005).");
}
return retval;
}
public Files getFiles(){
return m_files;
}
public Request getRequest(){
return m_formRequest;
}
public void downloadFile(String sourceFilePathName) throws
SmartUploadException,IOException,ServletException{
downloadFile(sourceFilePathName,null,null);
}
public void downloadFile(String sourceFilePathName,String contentType) throws
SmartUploadException,IOException,ServletException{
downloadFile(sourceFilePathName,contentType,null);
}
public void downloadFile(String sourceFilePathName,String contentType,
String destFileName) throws SmartUploadException,
IOException,ServletException{
downloadFile(sourceFilePathName,contentType,destFileName,65000);
}
public void downloadFile(String sourceFilePathName,String contentType,
String destFileName,
int blockSize) throws SmartUploadException,
IOException,ServletException{
if(sourceFilePathName==null){
throw new IllegalArgumentException(String.valueOf((new StringBuffer(
"File '")).
append(sourceFilePathName).append("' not found (1040).")));
}
if(sourceFilePathName.equals("")){
throw new IllegalArgumentException(String.valueOf((new StringBuffer(
"File '")).
append(sourceFilePathName).append("' not found (1040).")));
}
if(!isVirtual(sourceFilePathName)&&m_denyPhysicalPath){
throw new SmartUploadException("Physical path is denied (1035).");
}
if(isVirtual(sourceFilePathName)){
sourceFilePathName=m_application.getRealPath(sourceFilePathName);
}
File file=new File(sourceFilePathName);
FileInputStream fileIn=new FileInputStream(file);
long fileLen=file.length();
int readBytes=0;
int totalRead=0;
byte b[]=new byte[blockSize];
if(contentType==null){
m_response.setContentType("application/x-msdownload");
} else{
if(contentType.length()==0){
m_response.setContentType("application/x-msdownload");
} else{
m_response.setContentType(contentType);
}
}
m_response.setContentLength((int)fileLen);
if(destFileName==null){
m_response.setHeader("Content-Disposition",
"attachment; filename="+
toUtf8String(this.getFileName(sourceFilePathName)));
} else{
if(destFileName.length()==0){
m_response.setHeader("Content-Disposition","attachment;");
} else{
m_response.setHeader("Content-Disposition",
"attachment; filename="+
toUtf8String(this.getFileName(sourceFilePathName)));
}
} while((long)totalRead<fileLen){
readBytes=fileIn.read(b,0,blockSize);
totalRead+=readBytes;
m_response.getOutputStream().write(b,0,readBytes);
}
fileIn.close();
}
public void downloadFile(byte[] buffer,String contentType,
String destFileName) throws SmartUploadException,
IOException,ServletException{
int readBytes=0;
int totalRead=0;
byte b[]=buffer;
if(contentType==null){
m_response.setContentType("application/x-msdownload");
} else{
if(contentType.length()==0){
m_response.setContentType("application/x-msdownload");
} else{
m_response.setContentType(contentType);
}
}
if(destFileName==null){
m_response.setHeader("Content-Disposition",
"attachment; filename="+
toUtf8String(destFileName));
} else{
if(destFileName.length()==0){
m_response.setHeader("Content-Disposition","attachment;");
} else{
m_response.setHeader("Content-Disposition",
"attachment; filename="+
toUtf8String(destFileName));
}
}
m_response.getOutputStream().write(buffer, 0, buffer.length);
}
//YunFan add the new method in 2003-12-19
public void downloadField(ResultSet rs,String columnName,String contentType,
String destFileName,String DataBaseType) throws
SQLException,IOException,ServletException{
if(rs==null){
throw new IllegalArgumentException("The RecordSet cannot be null (1045).");
}
if(columnName==null){
throw new IllegalArgumentException(
"The columnName cannot be null (1050).");
}
if(columnName.length()==0){
throw new IllegalArgumentException(
"The columnName cannot be empty (1055).");
}
if(DataBaseType.equalsIgnoreCase("oracle")){
java.sql.Blob myReadBlob=rs.getBlob(columnName);
int ln=(int)myReadBlob.length();
java.io.InputStream readis=myReadBlob.getBinaryStream();
//System.out.println("文件大小:" + ln);
byte b[]=new byte[ln];
for(int j=0;j<ln;j++){
byte l=(byte)readis.read();
b[j]=l;
}
m_response.resetBuffer();
if(contentType==null){
m_response.setContentType("application/x-msdownload");
} else
if(contentType.length()==0){
m_response.setContentType("application/x-msdownload");
} else{
m_response.setContentType(contentType);
}
if(destFileName==null){
m_response.setHeader("Content-Disposition","attachment;");
} else
if(destFileName.length()==0){
m_response.setHeader("Content-Disposition","attachment;");
} else{
destFileName=new String(destFileName.getBytes("GB2312"),"ISO8859-1");
m_response.setHeader("Content-Disposition",
"attachment; filename=".
concat(String.valueOf(destFileName)));
}
m_response.getOutputStream().write(b,0,b.length);
} else{
byte b[]=rs.getBytes(columnName);
if(contentType==null){
m_response.setContentType("application/x-msdownload");
} else
if(contentType.length()==0){
m_response.setContentType("application/x-msdownload");
} else{
m_response.setContentType(contentType);
}
m_response.setContentLength(b.length);
if(destFileName==null){
m_response.setHeader("Content-Disposition","attachment;");
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -