java文件上傳,介紹幾種常用的方法,也是經過本人親手調試過的
1.jspsmartupload
這個組件用起來是挺方便的,不過就是只適合小文件上傳,如果大文件上傳的話就不行,查看了一下他的代碼,m_totalBytes = m_request.getContentLength();?m_binArray = new byte[m_totalBytes];居然把整個上傳文件都讀到內存去了,那如果是上傳幾十M的文件,同時幾個用戶上傳,服務器穩掛,不過如果只是上傳5M以內的小文件,這個組件還是挺實用的
下面是源代碼:
File類
/*
?* 創建日期 2006-7-29
?*
?* 更改所生成文件模板為
?* 窗口 > 首選項 > Java > 代碼生成 > 代碼和注釋
?*/
package com.kinstar.issuing.file;
/**
?* @author gongyifeng
?*
?* 更改所生成類型注釋的模板為
?* 窗口 > 首選項 > Java > 代碼生成 > 代碼和注釋
?*/
import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletException;
// Referenced classes of package com.jspsmart.upload:
// SmartUploadException, SmartUpload
public class File{
?private SmartUpload m_parent;
?private int m_startData;
?private int m_endData;
?private int m_size;
?private String m_fieldname;
?private String m_filename;
?private String m_fileExt;
?private String m_filePathName;
?private String m_contentType;
?private String m_contentDisp;
?private String m_typeMime;
?private String m_subTypeMime;
?private String m_contentString;
?private boolean m_isMissing;
?public static final int SAVEAS_AUTO = 0;
?public static final int SAVEAS_VIRTUAL = 1;
?public static final int SAVEAS_PHYSICAL = 2;
?File(){
??m_startData = 0;
??m_endData = 0;
??m_size = 0;
??m_fieldname = new String();
??m_filename = new String();
??m_fileExt = new String();
??m_filePathName = new String();
??m_contentType = new String();
??m_contentDisp = new String();
??m_typeMime = new String();
??m_subTypeMime = new String();
??m_contentString = new String();
??m_isMissing = true;
?}
?public void saveAs(String s) throws IOException, SmartUploadException{
??saveAs(s, 0);
?}
?public void saveAs(String s, int i) throws IOException, SmartUploadException{
??String s1 = new String();
??s1 = m_parent.getPhysicalPath(s, i);
??if(s1 == null)
???throw new IllegalArgumentException("There is no specified destination file (1140).");
??try
??{
???java.io.File file = new java.io.File(s1);
???FileOutputStream fileoutputstream = new FileOutputStream(file);
???fileoutputstream.write(m_parent.m_binArray, m_startData, m_size);
???fileoutputstream.close();
??}
??catch(IOException ioexception)
??{
???throw new SmartUploadException("File can't be saved (1120).");
??}
?}
?public void fileToField(ResultSet resultset, String s) throws ServletException, IOException, SmartUploadException, SQLException{
??long l = 0L;
??int i = 0x10000;
??int j = 0;
??int k = m_startData;
??if(resultset == null)
???throw new IllegalArgumentException("The RecordSet cannot be null (1145).");
??if(s == null)
???throw new IllegalArgumentException("The columnName cannot be null (1150).");
??if(s.length() == 0)
???throw new IllegalArgumentException("The columnName cannot be empty (1155).");
??l = BigInteger.valueOf(m_size).divide(BigInteger.valueOf(i)).longValue();
??j = BigInteger.valueOf(m_size).mod(BigInteger.valueOf(i)).intValue();
??try
??{
???for(int i1 = 1; (long)i1 < l; i1++)
???{
????resultset.updateBinaryStream(s, new ByteArrayInputStream(m_parent.m_binArray, k, i), i);
????k = k != 0 ? k : 1;
????k = i1 * i + m_startData;
???}
???
???if(j > 0)
????resultset.updateBinaryStream(s, new ByteArrayInputStream(m_parent.m_binArray, k, j), j);
??}catch(SQLException sqlexception){
???byte abyte0[] = new byte[m_size];
???System.arraycopy(m_parent.m_binArray, m_startData, abyte0, 0, m_size);
???resultset.updateBytes(s, abyte0);
??}catch(Exception exception)
??{
???throw new SmartUploadException("Unable to save file in the DataBase (1130).");
??}
?}
?public boolean isMissing(){
??return m_isMissing;
?}
?
?public String getFieldName(){
??return m_fieldname;
?}
?
?public String getFileName(){
??DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
??String date = df.format(new Date());
??
??return date+m_filename;
?}
?
?public String getFilePathName(){
??return m_filePathName;
?}
?
?public String getFileExt(){
??return m_fileExt;
?}
?
?public String getContentType(){
??return m_contentType;
?}
?
?public String getContentDisp(){
??return m_contentDisp;
?}
?
?public String getContentString(){
??String s = new String(m_parent.m_binArray, m_startData, m_size);
??return s;
?}
?
?public String getTypeMIME() throws IOException{
??return m_typeMime;
?}
?
?public String getSubTypeMIME(){
??return m_subTypeMime;
?}
?
?public int getSize(){
??return m_size;
?}
?
?protected int getStartData(){
??return m_startData;
?}
?
?protected int getEndData(){
??return m_endData;
?}
?
?protected void setParent(SmartUpload smartupload){
??m_parent = smartupload;
?}
?
?protected void setStartData(int i){
??m_startData = i;
?}
?
?protected void setEndData(int i){
??m_endData = i;
?}
?
?protected void setSize(int i){
??m_size = i;
?}
?
?protected void setIsMissing(boolean flag){
??m_isMissing = flag;
?}
?
?protected void setFieldName(String s){
??m_fieldname = s;
?}
?
?protected void setFileName(String s){
??m_filename = s;
?}
?
?protected void setFilePathName(String s){
??m_filePathName = s;
?}
?
?protected void setFileExt(String s){
??m_fileExt = s;
?}
?
?protected void setContentType(String s){
??m_contentType = s;
?}
?
?protected void setContentDisp(String s){
??m_contentDisp = s;
?}
?
?protected void setTypeMIME(String s){
??m_typeMime = s;
?}
?
?protected void setSubTypeMIME(String s){
??m_subTypeMime = s;
?}
?
?public byte getBinaryData(int i){
??if(m_startData + i > m_endData)
???throw new ArrayIndexOutOfBoundsException("Index Out of range (1115).");
??if(m_startData + i <= m_endData)
???return m_parent.m_binArray[m_startData + i];
??else
???return 0;
?}?
}
Files類
/*
?* 創建日期 2006-7-29
?*
?* 更改所生成文件模板為
?* 窗口 > 首選項 > Java > 代碼生成 > 代碼和注釋
?*/
package com.kinstar.issuing.file;
/**
?* @author gongyifeng
?*
?* 更改所生成類型注釋的模板為
?* 窗口 > 首選項 > Java > 代碼生成 > 代碼和注釋
?*/
import java.io.IOException;
import java.util.*;
// Referenced classes of package com.jspsmart.upload:
// File, SmartUpload
public class Files{
?private SmartUpload m_parent;
?private Hashtable m_files;
?private int m_counter;
?
?Files(){
??m_files = new Hashtable();
??m_counter = 0;
?}
?
?protected void addFile(File file){
??if(file == null)
??{
???throw new IllegalArgumentException("newFile cannot be null.");
??} else?{
???m_files.put(new Integer(m_counter), file);
???m_counter++;
???return;
??}
?}
?
?public File getFile(int i)
?{
?if(i < 0)
??throw new IllegalArgumentException("File's index cannot be a negative value (1210).");
?File file = (File)m_files.get(new Integer(i));
?if(file == null)
??throw new IllegalArgumentException("Files' name is invalid or does not exist (1205).");
?else
??return file;
?}
?
?public int getCount()
?{
??return m_counter;
?}
?
?public long getSize() throws IOException
?{
??long l = 0L;
??for(int i = 0; i < m_counter; i++)
??l += getFile(i).getSize();
??
??return l;
?}
?
?public Collection getCollection()
?{
??return m_files.values();
?}
?
?public Enumeration getEnumeration()
?{
??return m_files.elements();
?}
}
Request類
/*
?* 創建日期 2006-7-29
?*
?* 更改所生成文件模板為
?* 窗口 > 首選項 > Java > 代碼生成 > 代碼和注釋
?*/
package com.kinstar.issuing.file;
/**
?* @author gongyifeng
?*
?* 更改所生成類型注釋的模板為
?* 窗口 > 首選項 > Java > 代碼生成 > 代碼和注釋
?*/
import java.util.Enumeration;
import java.util.Hashtable;
public class Request
{
?private Hashtable m_parameters;
?private int m_counter;
?
?Request(){
??m_parameters = new Hashtable();
??m_counter = 0;
?}
?
?protected void putParameter(String s, String s1)?{
??if(s == null)
???throw new IllegalArgumentException("The name of an element cannot be null.");
??if(m_parameters.containsKey(s))
??{
???Hashtable hashtable = (Hashtable)m_parameters.get(s);
???hashtable.put(new Integer(hashtable.size()), s1);
??} else{
???Hashtable hashtable1 = new Hashtable();
???hashtable1.put(new Integer(0), s1);
???m_parameters.put(s, hashtable1);
???m_counter++;
??}
?}
?
?public String getParameter(String s){
?if(s == null)
??throw new IllegalArgumentException("Form's name is invalid or does not exist (1305).");
?Hashtable hashtable = (Hashtable)m_parameters.get(s);
?if(hashtable == null)
??return null;
?else
??return (String)hashtable.get(new Integer(0));
?}
?
?public Enumeration getParameterNames()
?{
??return m_parameters.keys();
?}
?
?public String[] getParameterValues(String s)
?{
??if(s == null)
???throw new IllegalArgumentException("Form's name is invalid or does not exist (1305).");
??Hashtable hashtable = (Hashtable)m_parameters.get(s);
??if(hashtable == null)
???return null;
??String as[] = new String[hashtable.size()];
??for(int i = 0; i < hashtable.size(); i++)
???as[i] = (String)hashtable.get(new Integer(i));
??
??return as;
?}
}
SmartUpload類
/*
?* 創建日期 2006-7-29
?*
?* 更改所生成文件模板為
?* 窗口 > 首選項 > Java > 代碼生成 > 代碼和注釋
?*/
package com.kinstar.issuing.file;
/**
?* @author gongyifeng
?*
?* 更改所生成類型注釋的模板為
?* 窗口 > 首選項 > Java > 代碼生成 > 代碼和注釋
?*/
import java.io.*;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
// Referenced classes of package com.jspsmart.upload:
// Files, Request, SmartUploadException, File
public class SmartUpload
{
?protected 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 servletconfig) throws ServletException
?{
??m_application = servletconfig.getServletContext();
?}
?
?public void service(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse)throws ServletException, IOException
?{
??m_request = httpservletrequest;
??m_response = httpservletresponse;
?}
?
?public final void initialize(ServletConfig servletconfig, HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse)throws ServletException
?{
??m_application = servletconfig.getServletContext();
??m_request = httpservletrequest;
??m_response = httpservletresponse;
?}
?
?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 servletcontext, HttpSession httpsession, HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse, JspWriter jspwriter) throws ServletException
?{
??m_application = servletcontext;
??m_request = httpservletrequest;
??m_response = httpservletresponse;
?}
?
?public void upload()throws ServletException, IOException, SmartUploadException
?{
??int i = 0;
??boolean flag = false;
??long l = 0L;
??boolean flag1 = false;
??String s = new String();
??String s2 = new String();
??String s4 = new String();
??String s5 = new String();
??String s6 = new String();
??String s7 = new String();
??String s8 = new String();
??String s9 = new String();
??String s10 = new String();
??boolean flag2 = false;
??m_totalBytes = m_request.getContentLength();
??m_binArray = new byte[m_totalBytes];
??int j;
??for(; i < m_totalBytes; i += j)
??try
??{
???m_request.getInputStream();
???j = m_request.getInputStream().read(m_binArray, i, m_totalBytes - i);
??}
??catch(Exception exception)
??{
???throw new SmartUploadException("Unable to upload.");
??}
??
??for(; !flag1 && m_currentIndex < m_totalBytes; m_currentIndex++)
??if(m_binArray[m_currentIndex] == 13)
???flag1 = true;
??else
???m_boundary = m_boundary + (char)m_binArray[m_currentIndex];
??
??if(m_currentIndex == 1)
???return;
??for(m_currentIndex++; m_currentIndex < m_totalBytes; m_currentIndex = m_currentIndex + 2)
??{
???String s1 = getDataHeader();
???m_currentIndex = m_currentIndex + 2;
???boolean flag3 = s1.indexOf("filename") > 0;
???String s3 = getDataFieldValue(s1, "name");
???if(flag3)
???{
????s6 = getDataFieldValue(s1, "filename");
????s4 = getFileName(s6);
????s5 = getFileExt(s4);
????s7 = getContentType(s1);
????s8 = getContentDisp(s1);
????s9 = getTypeMIME(s7);
????s10 = getSubTypeMIME(s7);
???}
???getDataSection();
???if(flag3 && s4.length() > 0)
???{
????if(m_deniedFilesList.contains(s5))
?????throw new SecurityException("The extension of the file is denied to be uploaded (1015).");
????if(!m_allowedFilesList.isEmpty() && !m_allowedFilesList.contains(s5))
?????throw new SecurityException("The extension of the file is not allowed to be uploaded (1010).");
????if(m_maxFileSize > 0L && (long)((m_endData - m_startData) + 1) > m_maxFileSize)
?????throw new SecurityException("Size exceeded for this file : " + s4 + " (1105).");
????l += (m_endData - m_startData) + 1;
????if(m_totalMaxFileSize > 0L && l > m_totalMaxFileSize)
?????throw new SecurityException("Total File Size exceeded (1110).");
???}
???if(flag3)
???{
????com.kinstar.issuing.file.File file = new com.kinstar.issuing.file.File();
????file.setParent(this);
????file.setFieldName(s3);
????file.setFileName(s4);
????file.setFileExt(s5);
????file.setFilePathName(s6);
????file.setIsMissing(s6.length() == 0);
????file.setContentType(s7);
????file.setContentDisp(s8);
????file.setTypeMIME(s9);
????file.setSubTypeMIME(s10);
????if(s7.indexOf("application/x-macbinary") > 0)
?????m_startData = m_startData + 128;
?????file.setSize((m_endData - m_startData) + 1);
?????file.setStartData(m_startData);
?????file.setEndData(m_endData);
?????m_files.addFile(file);
????} else
????{
?????String s11 = new String(m_binArray, m_startData, (m_endData - m_startData) + 1);
?????m_formRequest.putParameter(s3, s11);
????}
????if((char)m_binArray[m_currentIndex + 1] == '-')
?????break;
????}
?
???}
?
?public int save(String s)throws ServletException, IOException, SmartUploadException
?{
??return save(s, 0);
?}
?
?public int save(String s, int i)throws ServletException, IOException, SmartUploadException
?{
??int j = 0;
??if(s == null)
???s = m_application.getRealPath("/");
??if(s.indexOf("/") != -1)
??{
???if(s.charAt(s.length() - 1) != '/')
????s = s + "/";
???} else
???if(s.charAt(s.length() - 1) != '\\')
????s = s + "\\";
???for(int k = 0; k < m_files.getCount(); k++)
???if(!m_files.getFile(k).isMissing())
???{
???m_files.getFile(k).saveAs(s + m_files.getFile(k).getFileName(), i);
???j++;
??}
?
??return j;
?}
?
?public int getSize()
?{
??return m_totalBytes;
?}
?
?public byte getBinaryData(int i)
?{
??byte byte0;
??try
??{
???byte0 = m_binArray[i];
??}
??catch(Exception exception)
??{
???throw new ArrayIndexOutOfBoundsException("Index out of range (1005).");
??}
??return byte0;
?}
?
?public Files getFiles()
?{
??return m_files;
?}
?
?public Request getRequest()
?{
??return m_formRequest;
?}
?
?public void downloadFile(String s) throws ServletException, IOException, SmartUploadException
?{
??downloadFile(s, null, null);
?}
?
?public void downloadFile(String s, String s1) throws ServletException, IOException, SmartUploadException, SmartUploadException
?{
??downloadFile(s, s1, null);
?}
?
?public void downloadFile(String s, String s1, String s2)throws ServletException, IOException, SmartUploadException
?{
??downloadFile(s, s1, s2, 65000);
?}
?
?public void downloadFile(String s, String s1, String s2, int i)throws ServletException, IOException, SmartUploadException
?{
??if(s == null)
???throw new IllegalArgumentException("File '" + s + "' not found (1040).");
??if(s.equals(""))
???throw new IllegalArgumentException("File '" + s + "' not found (1040).");
??if(!isVirtual(s) && m_denyPhysicalPath)
???throw new SecurityException("Physical path is denied (1035).");
??if(isVirtual(s))
???s = m_application.getRealPath(s);
??java.io.File file = new java.io.File(s);
??FileInputStream fileinputstream = new FileInputStream(file);
??long l = file.length();
??boolean flag = false;
??int k = 0;
??byte abyte0[] = new byte[i];
??if(s1 == null)
???m_response.setContentType("application/x-msdownload");
??else
??if(s1.length() == 0)
???m_response.setContentType("application/x-msdownload");
??else
???m_response.setContentType(s1);
??m_response.setContentLength((int)l);
??m_contentDisposition = m_contentDisposition != null ? m_contentDisposition : "attachment;";
??if(s2 == null)
???m_response.setHeader("Content-Disposition", m_contentDisposition + " filename=" + getFileName(s));
??else
??if(s2.length() == 0)
???m_response.setHeader("Content-Disposition", m_contentDisposition);
??else
???m_response.setHeader("Content-Disposition", m_contentDisposition + " filename=" + s2);
??while((long)k < l)
??{
???int j = fileinputstream.read(abyte0, 0, i);
???k += j;
???m_response.getOutputStream().write(abyte0, 0, j);
??}
??fileinputstream.close();
?}
?
?public void downloadField(ResultSet resultset, String s, String s1, String s2) throws ServletException, IOException, SQLException
?{
?if(resultset == null)
??throw new IllegalArgumentException("The RecordSet cannot be null (1045).");
?if(s == null)
??throw new IllegalArgumentException("The columnName cannot be null (1050).");
?if(s.length() == 0)
??throw new IllegalArgumentException("The columnName cannot be empty (1055).");
?byte abyte0[] = resultset.getBytes(s);
?if(s1 == null)
??m_response.setContentType("application/x-msdownload");
?else
?if(s1.length() == 0)
??m_response.setContentType("application/x-msdownload");
?else
??m_response.setContentType(s1);
?m_response.setContentLength(abyte0.length);
?if(s2 == null)
??m_response.setHeader("Content-Disposition", "attachment;");
?else
?if(s2.length() == 0)
??m_response.setHeader("Content-Disposition", "attachment;");
?else
??m_response.setHeader("Content-Disposition", "attachment; filename=" + s2);
?m_response.getOutputStream().write(abyte0, 0, abyte0.length);
?}
?
?public void fieldToFile(ResultSet resultset, String s, String s1)throws ServletException, IOException, SmartUploadException, SQLException
?{
??try
??{
???if(m_application.getRealPath(s1) != null)
???s1 = m_application.getRealPath(s1);
???InputStream inputstream = resultset.getBinaryStream(s);
???FileOutputStream fileoutputstream = new FileOutputStream(s1);
???int i;
???while((i = inputstream.read()) != -1)
????fileoutputstream.write(i);
???fileoutputstream.close();
??}
??catch(Exception exception)
??{
???throw new SmartUploadException("Unable to save file from the DataBase (1020).");
??}
?}
?
?private String getDataFieldValue(String s, String s1)
?{
??String s2 = new String();
??String s3 = new String();
??int i = 0;
??boolean flag = false;
??boolean flag1 = false;
??boolean flag2 = false;
??s2 = s1 + "=" + '"';
??i = s.indexOf(s2);
??if(i > 0)
??{
???int j = i + s2.length();
???int k = j;
???s2 = "\"";
???int l = s.indexOf(s2, j);
???if(k > 0 && l > 0)
???s3 = s.substring(k, l);
??}
??return s3;
?}
?
?private String getFileExt(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 "";
?}
?
?private String getContentType(String s)
?{
??String s1 = new String();
??String s2 = new String();
??int i = 0;
??boolean flag = false;
??s1 = "Content-Type:";
??i = s.indexOf(s1) + s1.length();
??if(i != -1)
??{
???int j = s.length();
???s2 = s.substring(i, j);
??}
??return s2;
?}
?
?private String getTypeMIME(String s)
?{
??String s1 = new String();
??int i = 0;
??i = s.indexOf("/");
??if(i != -1)
???return s.substring(1, i);
??else
??return s;
?}
?
?private String getSubTypeMIME(String s)
?{
??String s1 = new String();
??int i = 0;
??boolean flag = false;
??i = s.indexOf("/") + 1;
??if(i != -1)
??{
???int j = s.length();
???return s.substring(i, j);
??} else
??{
???return s;
??}
?}
?
?private String getContentDisp(String s)
?{
??String s1 = new String();
??int i = 0;
??int j = 0;
??i = s.indexOf(":") + 1;
??j = s.indexOf(";");
??s1 = s.substring(i, j);
??return s1;
?}
?
?private void getDataSection()
?{
??boolean flag = false;
??String s = new String();
??int i = m_currentIndex;
??int j = 0;
??int k = m_boundary.length();
??m_startData = m_currentIndex;
??m_endData = 0;
??while(i < m_totalBytes)
??if(m_binArray[i] == (byte)m_boundary.charAt(j))
??{
???if(j == k - 1)
???{
????m_endData = ((i - k) + 1) - 3;
????break;
???}
???i++;
???j++;
??} else
??{
???i++;
???j = 0;
??}
??m_currentIndex = m_endData + k + 3;
?}
?
?private String getDataHeader()
?{
??int i = m_currentIndex;
??int j = 0;
??boolean flag = false;
??for(boolean flag1 = false; !flag1;)
??if(m_binArray[m_currentIndex] == 13 && m_binArray[m_currentIndex + 2] == 13)
??{
???flag1 = true;
???j = m_currentIndex - 1;
???m_currentIndex = m_currentIndex + 2;
??} else
??{
???m_currentIndex++;
??}
??
??String s = new String(m_binArray, i, (j - i) + 1);
??return s;
?}
?
?private String getFileName(String s)
?{
??String s1 = new String();
??String s2 = new String();
??int i = 0;
??boolean flag = false;
??boolean flag1 = false;
??boolean flag2 = false;
??i = s.lastIndexOf(47);
??if(i != -1)
???return s.substring(i + 1, s.length());
??i = s.lastIndexOf(92);
??if(i != -1)
???return s.substring(i + 1, s.length());
??else
??return s;
?}
?
?public void setDeniedFilesList(String s) throws ServletException, IOException, SQLException
?{
??String s1 = "";
??if(s != null)
??{
??String s2 = "";
??for(int i = 0; i < s.length(); i++)
??if(s.charAt(i) == ',')
??{
???if(!m_deniedFilesList.contains(s2))
???m_deniedFilesList.addElement(s2);
???s2 = "";
??} else
??{
???s2 = s2 + s.charAt(i);
??}
??
??if(s2 != "")
???m_deniedFilesList.addElement(s2);
??} else
??{
???m_deniedFilesList = null;
??}
?}
?
?public void setAllowedFilesList(String s)
?{
??String s1 = "";
??if(s != null)
??{
???String s2 = "";
???for(int i = 0; i < s.length(); i++)
???if(s.charAt(i) == ',')
???{
????if(!m_allowedFilesList.contains(s2))
????m_allowedFilesList.addElement(s2);
????s2 = "";
???} else
???{
????s2 = s2 + s.charAt(i);
???}
???
???if(s2 != "")
????m_allowedFilesList.addElement(s2);
??} else
??{
???m_allowedFilesList = null;
??}
?}
?
?public void setDenyPhysicalPath(boolean flag)
?{
??m_denyPhysicalPath = flag;
?}
?
?public void setForcePhysicalPath(boolean flag)
?{
??m_forcePhysicalPath = flag;
?}
?
?public void setContentDisposition(String s)
?{
??m_contentDisposition = s;
?}
?
?public void setTotalMaxFileSize(long l)
?{
??m_totalMaxFileSize = l;
?}
?
?public void setMaxFileSize(long l)
?{
??m_maxFileSize = l;
?}
?
?protected String getPhysicalPath(String s, int i)throws IOException
?{
??String s1 = new String();
??String s2 = new String();
??String s3 = new String();
??boolean flag = false;
??s3 = System.getProperty("file.separator");
??if(s == null)
???throw new IllegalArgumentException("There is no specified destination file (1140).");
??if(s.equals(""))
???throw new IllegalArgumentException("There is no specified destination file (1140).");
??if(s.lastIndexOf("\\") >= 0)
??{
???s1 = s.substring(0, s.lastIndexOf("\\"));
???s2 = s.substring(s.lastIndexOf("\\") + 1);
??}
??if(s.lastIndexOf("/") >= 0)
??{
???s1 = s.substring(0, s.lastIndexOf("/"));
???s2 = s.substring(s.lastIndexOf("/") + 1);
??}
??s1 = s1.length() != 0 ? s1 : "/";
??java.io.File file = new java.io.File(s1);
??if(file.exists())
???flag = true;
??if(i == 0)
??{
???if(isVirtual(s1))
???{
????s1 = m_application.getRealPath(s1);
????if(s1.endsWith(s3))
?????s1 = s1 + s2;
????else
????s1 = s1 + s3 + s2;
?????return s1;
???}
???if(flag)
???{
????if(m_denyPhysicalPath)
?????throw new IllegalArgumentException("Physical path is denied (1125).");
????else
?????return s;
???} else
???{
????throw new IllegalArgumentException("This path does not exist (1135).");
???}
??}
??if(i == 1)
??{
???if(isVirtual(s1))
???{
????s1 = m_application.getRealPath(s1);
???if(s1.endsWith(s3))
????s1 = s1 + s2;
???else
????s1 = s1 + s3 + s2;
???return s1;
??}
??if(flag)
???throw new IllegalArgumentException("The path is not a virtual path.");
??else
???throw new IllegalArgumentException("This path does not exist (1135).");
??}
??if(i == 2)
??{
???if(flag)
???if(m_denyPhysicalPath)
????throw new IllegalArgumentException("Physical path is denied (1125).");
???else
????return s;
???if(isVirtual(s1))
????throw new IllegalArgumentException("The path is not a physical path.");
???else
???throw new IllegalArgumentException("This path does not exist (1135).");
??} else
??{
???return null;
??}
?}
?
?public void uploadInFile(String s)throws IOException, SmartUploadException
?{
??int i = 0;
??int j = 0;
??boolean flag = false;
??if(s == null)
???throw new IllegalArgumentException("There is no specified destination file (1025).");
??if(s.length() == 0)
???throw new IllegalArgumentException("There is no specified destination file (1025).");
??if(!isVirtual(s) && m_denyPhysicalPath)
???throw new SecurityException("Physical path is denied (1035).");
??i = m_request.getContentLength();
??m_binArray = new byte[i];
??int k;
??for(; j < i; j += k)
??try
??{
???k = m_request.getInputStream().read(m_binArray, j, i - j);
??}
??catch(Exception exception)
??{
???throw new SmartUploadException("Unable to upload.");
??}
??
??if(isVirtual(s))
???s = m_application.getRealPath(s);
??try
??{
???java.io.File file = new java.io.File(s);
???FileOutputStream fileoutputstream = new FileOutputStream(file);
???fileoutputstream.write(m_binArray);
???fileoutputstream.close();
??}
??catch(Exception exception1)
??{
???throw new SmartUploadException("The Form cannot be saved in the specified file (1030).");
??}
?}
?
?private boolean isVirtual(String s)
?{
??if(m_application.getRealPath(s) != null)
??{
???java.io.File file = new java.io.File(m_application.getRealPath(s));
???return file.exists();
??} else
??{
???return false;
??}
?}
}
SmartUploadException 類
/*
?* 創建日期 2006-7-29
?*
?* 更改所生成文件模板為
?* 窗口 > 首選項 > Java > 代碼生成 > 代碼和注釋
?*/
package com.kinstar.issuing.file;
/**
?* @author gongyifeng
?*
?* 更改所生成類型注釋的模板為
?* 窗口 > 首選項 > Java > 代碼生成 > 代碼和注釋
?*/
public class SmartUploadException extends Exception
{
?SmartUploadException(String s)
?{
??super(s);
?}
}
上傳的Servlet
package com.kinstar.issuing.action;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import java.io.*;
import java.sql.SQLException;
import java.util.*;
import java.text.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.kinstar.issuing.file.File;
import com.kinstar.issuing.file.SmartUpload;
import com.kinstar.issuing.objects.t_user;
import com.kinstar.issuing.operation.UserOperation;
import com.kinstar.issuing.program.programService;
import com.kinstar.issuing.session.SessionGloble;
import com.kinstar.issuing.util.StringUtil;
/**
?* @version ?1.0
?* @author gyf
?*/
public class upload2ProgramAction extends HttpServlet{
? private ServletConfig config;
? /**
? * 初始化Servlet
? */
? final public void init(ServletConfig config) throws ServletException {
??this.config = config;
? }
? /**
? * 處理GET請求
? */
? public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
?? doPost(request,response);
? }
?
? /**
? * 響應POST請求
? */
? public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {??
?? int count=0;
?? SmartUpload mySmartUpload = new SmartUpload();
?? try {
???? // 初始化
???? mySmartUpload.initialize(config,request,response);
?
???? // 上載
???? mySmartUpload.upload();
???? com.kinstar.issuing.file.File f1 = mySmartUpload.getFiles().getFile(0);
?? //? com.kinstar.issuing.file.File f2 = mySmartUpload.getFiles().getFile(1);
???? String backPic = f1.getFileName();
?? //String name2 = f2.getFileName();
???
???? long size=0;
?????
????// 保存上載文件到指定目錄
???count=mySmartUpload.save("ads");??
???response.sendRedirect("program.jsp?dopass=ture");
??
??? }?????
?????
??? catch (Exception e){
???? response.sendRedirect("fail.jsp");
?? }?
}
2.common-fileupload組件
挺好用的,也能夠上傳大文件,我試過,300M以上的文件上傳本地傳非???異地測試也能夠上傳成功.
首先要下載org.apache.commons.fileupload包和org.apache.commons.io包
下面是我的servlet
package com.kinstar.issuing.action;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import java.io.*;
import java.sql.SQLException;
import java.util.*;
import java.text.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.regex.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import com.kinstar.issuing.objects.t_user;
import com.kinstar.issuing.operation.UserOperation;
import com.kinstar.issuing.program.programService;
import com.kinstar.issuing.session.SessionGloble;
import com.kinstar.issuing.util.StringUtil;
/**
?* @version ?1.0
?* @author gyf
?*/
public class uploadProgramAction extends HttpServlet{
? private static final String CONTENT_TYPE = "text/html; charset=GB2312";
?
? /**
? * 處理GET請求
? */
? public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
??? doPost(request,response);
? }
?
? /**
? * 響應POST請求
? */
? public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
?? // 變量定義
??? response.setContentType(CONTENT_TYPE);
??? HttpSession modifysession=request.getSession();
??? SessionGloble logonUser;
??? logonUser=(SessionGloble)modifysession.getAttribute("UserInfo");
?????? if(logonUser==null){
?????? response.sendRedirect("mainindex.jsp");
??? }
??? t_user userinfo=new t_user();
??? UserOperation user=null;
??? try {
???? user = new UserOperation();
??? } catch (Exception e1) {
??? // TODO 自動生成 catch 塊
??? e1.printStackTrace();
??? }
??? try {
???? userinfo=user.getUser(logonUser.getUserId());
??? } catch (Exception e2) {
??? // TODO 自動生成 catch 塊
??? e2.printStackTrace();
??? }
???? //System.out.println("figure="+userinfo.getUserFigure());
???? PrintWriter out=response.getWriter();
???? DateFormat updf = new SimpleDateFormat("yyyyMMddHHmm");
???? String updateTime = updf.format(new Date());
???? int isNeed = 0;
???? String IsCheck="0";
??
??? //省農行用戶上傳的節目必需顯示,且審批已經合格
???? if(userinfo.getUserFigure().equals("1")){
???? isNeed = 1;
???? IsCheck = "1";
???? }
???? else{
???? isNeed = 0;
???? IsCheck = "0";
???? }
??? int type=0;
??? String avaTime="";
??? String screen="";
??? int fileTime=0;
??? int fileTimeReal=0;
??? int circle=0;
??? String picSwitch="";
??? String deleState="1";
??? String backPic="";
???
??? String fieldName="";
??? String finalName="";
??? String fileNameReal="";
??? long size=0;
??? String name="";
???? try {
????DiskFileUpload fu = new DiskFileUpload();
????// 設置允許用戶上傳文件大小,單位:字節,這里設為2m
????fu.setSizeMax(5*1024*1024*1024);
????// 設置最多只允許在內存中存儲的數據,單位:字節
????fu.setSizeThreshold(10*1024*1024);
????// 設置一旦文件大小超過getSizeThreshold()的值時數據存放在硬盤的目錄
????fu.setRepositoryPath("C:\\WINDOWS\\Temp\\");
????//開始讀取上傳信息
????List fileItems = fu.parseRequest(request);
????//依次處理每個上傳的文件
????Iterator iter = fileItems.iterator();
?
??
?????? //正則匹配,過濾路徑取文件名
????String regExp=".+\\\\(.+)$";
?
????//過濾掉的文件類型
????String[] errorType={".exe",".com",".cgi",".asp"};
?????
????Pattern p = Pattern.compile(regExp);
????StringUtil su = new StringUtil();
???? ?
????while (iter.hasNext()) {
????? FileItem item = (FileItem)iter.next();
????
?????? if(item.isFormField()) {
?????? // 獲得表單域的名字
??????? fieldName = item.getFieldName();
??????? // 如果表單域的名字是name…
??????? if(fieldName.equals("type"))
??????? ??? type = Integer.parseInt(item.getString());
??????
?????? }
????? if (!item.isFormField()) {
?????? name = item.getName();
?????? size = item.getSize();
?????? if((name==null||name.equals("")) && size==0)
??????? continue;
??????? Matcher m = p.matcher(name);
??????? boolean result = m.find();
??????? if (result){
??????? for (int temp=0;temp<errorType.length;temp++){
??????? if (m.group(1).endsWith(errorType[temp])){
????????throw new IOException(name+": wrong type");
??????? }
??????? }
??????
?????? DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
??????????????? String date = df.format(new Date());
?????? fileNameReal=date+m.group(1);
?????? finalName=date+Math.round(Math.random()*10000)+fileNameReal.substring(fileNameReal.indexOf("."));
??????? //保存上傳的文件到指定的目錄??
??????? //在下文中上傳文件至數據庫時,將對這里改寫
??????? item.write(new File(getServletContext().getRealPath(".//ads//")+finalName));
??????? //out.print(finalName+size);
??????? }
?????? else
?????? {
??????throw new IOException("fail to upload");
??????
?????? }?
????? }
????? if(item.isFormField()) {
?????// 獲得表單域的名字
?????fieldName = item.getFieldName();
?????if(fieldName.equals("avaTime"))
??????avaTime=item.getString();
?????if(fieldName.equals("screen"))
??????screen=item.getString();
?????if(fieldName.equals("fileTime"))
??????fileTime = Integer.parseInt(item.getString());
?????if(fieldName.equals("fileTimeReal"))
??????fileTimeReal = Integer.parseInt(item.getString());
?????if(fieldName.equals("circle"))
??????circle = Integer.parseInt(item.getString());?
?????if(fieldName.equals("switchPic"))
??????? picSwitch = item.getString();?
??????
????? }???
?????? }
???? }catch (IOException e){
???? ??out.println(e);
???? }catch (FileUploadException e){
???? ??out.println(e);
???? } catch (Exception e) {
????// TODO 自動生成 catch 塊
?????e.printStackTrace();
???? }
???? if(finalName.equals("")){
???? ??response.sendRedirect("fail.jsp");
???? }
???? else{
???try {
????programService ps = new programService();
????ps.insertProgram(userinfo.getUserId(),updateTime,type,finalName,size,isNeed,avaTime,deleState,IsCheck,userinfo.getCity(),backPic,screen,fileTime,fileTimeReal,picSwitch,circle,userinfo.getUserFigure(),new String(fileNameReal.getBytes("GB2312"),"ISO8859-1"));
????response.sendRedirect("program.jsp?dopass=true");?
???} catch (Exception e3) {
???// TODO 自動生成 catch 塊
????e3.printStackTrace();
???}
???? }
???}
}
?