首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

java SmartUpload类有关问题 没有分了就这点了

2011-12-25 
java SmartUpload类问题 没有分了就这点了我在网上看了很多修改SmartUpload类就可以下载中文名字的文件,但

java SmartUpload类问题 没有分了就这点了
我在网上看了很多修改SmartUpload类就可以下载中文名字的文件,但是我在反编译SmartUpload类后然后修改如下:
/*
*由   ReJava   v1.4   反编译
*   Copyright   2005-2007   Apull
*2007-9-25
*源文件:SmartUpload.java
*/

package   com.jspsmart.upload;

import   java.io.File;
import   java.io.FileInputStream;
import   java.io.FileOutputStream;
import   java.io.IOException;
import   java.io.InputStream;
import   java.io.OutputStream;
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.ServletRequest;
import   javax.servlet.ServletResponse;
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
{

protected   byte   m_binArray[];
protected   javax.servlet.http.HttpServletRequest   m_request;
protected   javax.servlet.http.HttpServletResponse   m_response;
protected   javax.servlet.ServletContext   m_application;
private   int   m_totalBytes;
private   int   m_currentIndex;
private   int   m_startData;
private   int   m_endData;
private   java.lang.String   m_boundary;
private   long   m_totalMaxFileSize;
private   long   m_maxFileSize;
private   java.util.Vector   m_deniedFilesList;
private   java.util.Vector   m_allowedFilesList;
private   boolean   m_denyPhysicalPath;
private   boolean   m_forcePhysicalPath;
private   java.lang.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   com.jspsmart.upload.Files   m_files;
private   com.jspsmart.upload.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();
}

/**
  *   @deprecated   Method   init   is   deprecated
  */

public   final   void   init(javax.servlet.ServletConfig   config)
throws   javax.servlet.ServletException
{
m_application   =   config.getServletContext();
}

/**
  *   @deprecated   Method   service   is   deprecated


  */

public   void   service(javax.servlet.http.HttpServletRequest   request,   javax.servlet.http.HttpServletResponse   response)
throws   java.io.IOException,   javax.servlet.ServletException
{
m_request   =   request;
m_response   =   response;
}

public   final   void   initialize(javax.servlet.ServletConfig   config,   javax.servlet.http.HttpServletRequest   request,   javax.servlet.http.HttpServletResponse   response)
throws   javax.servlet.ServletException
{
m_application   =   config.getServletContext();
m_request   =   request;
m_response   =   response;
}

public   final   void   initialize(javax.servlet.jsp.PageContext   pageContext)
throws   javax.servlet.ServletException
{
m_application   =   pageContext.getServletContext();
m_request   =   (javax.servlet.http.HttpServletRequest)pageContext.getRequest();
m_response   =   (javax.servlet.http.HttpServletResponse)pageContext.getResponse();
}

/**
  *   @deprecated   Method   initialize   is   deprecated
  */

public   final   void   initialize(javax.servlet.ServletContext   application,   javax.servlet.http.HttpSession   session,   javax.servlet.http.HttpServletRequest   request,   javax.servlet.http.HttpServletResponse   response,   javax.servlet.jsp.JspWriter   out)
throws   javax.servlet.ServletException
{
m_application   =   application;
m_request   =   request;
m_response   =   response;
}

public   void   upload()
throws   com.jspsmart.upload.SmartUploadException,   java.io.IOException,   javax.servlet.ServletException
{
int   totalRead   =   0;
int   readBytes   =   0;
long   totalFileSize   =   0L;
boolean   found   =   false;
java.lang.String   dataHeader   =   new   String();
java.lang.String   fieldName   =   new   String();
java.lang.String   fileName   =   new   String();
java.lang.String   fileExt   =   new   String();
java.lang.String   filePathName   =   new   String();
java.lang.String   contentType   =   new   String();
java.lang.String   contentDisp   =   new   String();
java.lang.String   typeMIME   =   new   String();
java.lang.String   subTypeMIME   =   new   String();
boolean   isFile   =   false;
m_totalBytes   =   m_request.getContentLength();
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   (java.lang.Exception   e)
{
throw   new   SmartUploadException( "Unable   to   upload. ");
}

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)
{
if   (m_deniedFilesList.contains(fileExt))
throw   new   SecurityException( "The   extension   of   the   file   is   denied   to   be   uploaded   (1015). ");
if   (!m_allowedFilesList.isEmpty()   &&   !m_allowedFilesList.contains(fileExt))
throw   new   SecurityException( "The   extension   of   the   file   is   not   allowed   to   be   uploaded   (1010). ");
if   (m_maxFileSize   >   (long)0   &&   (long)((m_endData   -   m_startData)   +   1)   >   m_maxFileSize)
throw   new   SecurityException(java.lang.String.valueOf((new   StringBuffer( "Size   exceeded   for   this   file   :   ")).append(fileName).append( "   (1105). ")));
totalFileSize   +=   (m_endData   -   m_startData)   +   1;
if   (m_totalMaxFileSize   >   (long)0   &&   totalFileSize   >   m_totalMaxFileSize)
throw   new   SecurityException( "Total   File   Size   exceeded   (1110). ");
}
if   (isFile)
{
com.jspsmart.upload.File   newFile   =   new   com.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
{
java.lang.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);
}



[解决办法]
byte abyte0[] = new byte;
这样都可以吗?
[解决办法]
package com.util;

import java.io.FileInputStream;
import java.io.IOException;

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.jsp.PageContext;

public class DownLoadFile {
protected byte m_binArray[];

protected HttpServletRequest m_request;

protected HttpServletResponse m_response;

protected ServletContext m_application;

private String m_contentDisposition = null;


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 void downloadFile(String s) throws ServletException, IOException {
//缓存区大小6144字节 6m
downloadFile(s, 6144);
}

public void downloadFile(String s, int i) throws ServletException,
IOException {
if (s == null)
throw new IllegalArgumentException( "File &#39; " + s
+ "&#39; not found (1040). ");
if (s.equals( " "))
throw new IllegalArgumentException( "File &#39; " + s
+ "&#39; not found (1040). ");
if (isVirtual(s))
s = m_application.getRealPath(s);
else
return ;
java.io.File file = new java.io.File(s);
FileInputStream fileinputstream = new FileInputStream(file);
long l = file.length();
if(l <1024)//1k
i=(int)l;
int k = 0;
byte abyte0[] = new byte[i];
m_response.setContentType( "application/x-msdownload ");
m_response.setContentLength((int) l);
m_contentDisposition = m_contentDisposition != null ? m_contentDisposition
: "attachment; ";
m_response.setHeader( "Content-Disposition ", m_contentDisposition
+ " filename= " + toUtf8String(getFileName(s)));
while ((long) k < l) {
int j = fileinputstream.read(abyte0, 0, i);
k += j;
m_response.getOutputStream().write(abyte0, 0, j);
}
fileinputstream.close();
}

private String getFileName(String s) {
int i = 0;
i = s.lastIndexOf( '/ ');
if (i != -1) {
return s.substring(i + 1, s.length());
}
i = s.lastIndexOf( '\\ ');
if (i != -1) {
return s.substring(i + 1, s.length());
} else {
return s;
}
}

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;
}
}

/**
* 将文件名中的汉字转为UTF8编码的串,以便下载时能正确显示另存的文件名.


* @param s 原文件名
* @return 重新编码后的文件名
*/
public static String toUtf8String(String s) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c > = 0 && c <= 255) {
sb.append(c);
} else {
byte[] b;
try {
b = Character.toString(c).getBytes( "utf-8 ");
} catch (Exception ex) {
System.out.println(ex);
b = new byte[0];
}
for (int j = 0; j < b.length; j++) {
int k = b[j];
if (k < 0)
k += 256;
sb.append( "% " + Integer.toHexString(k).toUpperCase());
}
}
}
return sb.toString();
}
}


去年写的你查考下吧我记得中文名没问题,另外这个不好用,推荐用apache的io
com.util.DownLoadFile dlf = new com.util.DownLoadFile();
dlf.initialize(getServletConfig(),request,response);
dlf.downloadFile(文件);
[解决办法]
java技术交流,欢迎加入40652189,深入学习java的**群,探讨新技术

热点排行