1. 程式人生 > >jspsmartupload亂碼問題(修改原始碼的解決辦法)

jspsmartupload亂碼問題(修改原始碼的解決辦法)

在用jspsmartupload元件進行檔案上傳下載的時候,如果使用者選擇的是含有中文名字的檔名或是檔案路徑含有中文,則會出現亂碼.經過一段時間的除錯,本人已經初步解決了這個問題.現將解決的程式碼貼出來.

1.上傳(經過測試絕對成功)   在SmartUpload.java檔案中,增加一個屬性private String charset用於進行字元編碼轉換,相應的有兩個方法:  public void setCharset(String charset)
 {
  this.charset = charset;
 }
 public String getCharset()
 {
  return this.charset;
 } 另外改動二個地方: 在upload()方法中,將 String s11 = new String(m_binArray,m_startData,(m_endData - m_startData) + 1);改為 String s11 = new String(m_binArray,m_startData,(m_endData - m_startData) + 1,this.getCharset()); 這個時候我們應該在進行處理上傳的jsp中進行設定SmartUpload su = new SmartUpload();su.setCharset("UTF-8");就可以了.(這步是在上傳的時候設定它的編碼)
在getDataHeader()方法中,將 String s = new String(m_binArray, i, (j - i) + 1); 改為 String s; try
  {
   s = new String(m_binArray, i, (j - i) + 1,this.getCharset());
  }
  catch(Exception e)
  {
   s = "";
  }   在SmartFile.java檔案中,增加一個屬性private String charset用於進行字元編碼轉換,相應的有兩個方法:  public void setCharset(String charset)
 {
  this.charset = charset;
 }
 public String getCharset()
 {
  return this.charset;
 } 另外需要改動一個地方 在getContentString()方法中,將 String s = new String(m_parent.m_binArray,m_startData,m_size); 改為 String s;
     try
     {
      s = new String(m_parent.m_binArray,m_startData,m_size,this.getCharset());
     }
     catch(Exception e)
     {
      s = "";
     } 對於SmartFile.java檔案中,本人認為可改可不改,不會對上傳有什麼影響. 經過如此改動原始碼後,對於中文亂碼問題有很好的解決能力. 2.下載
  在SmartUpload.java檔案中,將downloadFile(String s, String s1, String s2, int i)方法改為 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=" +
toUtf8String(getFileName(s)));
else
if(s2.length() == 0)
m_response.setHeader("Content-Disposition",
m_contentDisposition);
else
m_response.setHeader("Content-Disposition",
m_contentDisposition + " filename=" + toUtf8String(s2));
while((long)k < l)
{
int j = fileinputstream.read(abyte0, 0, i);
k += j;
m_response.getOutputStream().write(abyte0, 0, j);
}
fileinputstream.close();
} 另外需要增加一個獲得漢字字元的UTF-8編碼的方法 /**
* 將檔名中的漢字轉為UTF8編碼的串,以便下載時能正確顯示另存的檔名.
* 縱橫軟體製作中心雨亦奇2003.08.01
* @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();
} 將這個增加到SmartUpload.java檔案中,下載時的另存中文名亂碼問題便不會出現了.

相關推薦

tomcat假死 原因及解決辦法

空間 error: 解決 -h 多人 lan 特殊 sun out 一、懷疑JVM內存溢出   表現:tomcat就連續拋java.lang.OutOfMemoryError的錯誤   1、首先是:java.lang.OutOfMemoryError: Java heap

Mysql root使用者許可權丟失解決辦法忘記密碼解決辦法

微信公眾號: 關注可瞭解更多的教程及技巧。問題或建議,請公眾號留言; 丟失原因:通過sql語句修改root使用者的密碼。 版本介紹:mysql5.5 解決方法:A:找到mysql服務,停止mysql服務。          B:執行cmd,並進入%******%MySQ

TP3.2分頁第二頁帶查詢條件顯示兩種解決辦法

先看看手冊的....然而怎麼都不行,最後給成GET模式 直接ok帶入查詢條件如果是POST方式查詢,如何確保分頁之後能夠保持原先的查詢條件呢,我們可以給分頁類傳入引數,方法是給分頁類的parameter屬性賦值$count = $User->where($ma

jspsmartupload亂碼問題修改原始碼解決辦法

在用jspsmartupload元件進行檔案上傳下載的時候,如果使用者選擇的是含有中文名字的檔名或是檔案路徑含有中文,則會出現亂碼.經過一段時間的除錯,本人已經初步解決了這個問題.現將解決的程式碼貼出來. 1.上傳(經過測試絕對成功)   在SmartUpload.j

紅包功能實現 附原始碼 簽名錯誤、CA證書錯誤等解決辦法

場景:小程式開發一個拆紅包的功能,後臺thinkphp3.2,小程式和微信商戶平臺不是同一個賬號,但是已經關聯 官方介面文件:微信支付-企業付款到零錢 使用條件 1、商戶號(或同主體其他商戶號)已入駐90日 2、商戶號(或同主體其他商戶號)有30

centos7 更改網絡後 無法重啟network 解決辦法

entos 解決辦法 ima urn rest 網關 /etc tar 網卡名 今天由於用nat與本地局域網沖突,可能和之前ENSP搭建時虛擬機沖突造成 然後修改了VMnet8的ip,網關,DNS 同時更改虛擬網絡編譯器與VMnet8保持相同 進入虛擬機,更改/etc/sy

webpck不能編譯這個屬性-webkit-box-orient: vertical 解決辦法

TE soft git box less sans mic app ESS sass:/* autoprefixer: off */-webkit-box-orient: vertical;/* autoprefixer: on */less:/*! autoprefixe

jmeter—PerfMon Metrics Collector附java.io.IOException: Agent is unreachable via TCP錯誤解決辦法 jmeter—PerfMon Metrics Collector附java.io.IOException: Agen

jmeter—PerfMon Metrics Collector(附java.io.IOException: Agent is unreachable via TCP錯誤解決辦法 轉自https://www.cnblogs.com/jescs/p/7026437.html 新增伺服器監控

Android開發——資料庫框架Suger遇到的大坑依據列名查詢不到資料解決辦法

Android開發——資料庫框架Suger遇到的大坑(依據列名查詢不到資料解決辦法) JavaBean命名出現大寫,資料無法正常儲存(用的是Suger第二種操作方式,第一種沒有測試) 習慣中對Bean中變數的命名會出現大寫字母,但使用Suger操作這樣的資料會出現問題,比如我這樣命名

今日筆記高階控制元件&介面卡&我遇到的一些bug及解決辦法

1.高階控制元件與低階空間的區別 是否使用了介面卡 2.今天所學習的三個高階控制元件 AutoCompleteTextView(自動提示文字框 單次) MultiAutoCompleteTextView(自動提示文字框 多次) Spinner(下

HttpWebRequest使用注意發生阻塞的解決辦法

HttpWebRequest使用注意(發生阻塞的解決辦法) HttpWebResponse myResponse = null; Stream reqStream = null; Stream resStream = null

vue打包頁面空白最完美的解決辦法

vue打包頁面空白,什麼都不顯示(解決) 當打完包的時候,可以看到它提示一句話 Tip: built files are meant to be served over an HTTP server. Opening index.html over file:// won’t

關於新建maven工程時,出現Could not calculate build plan錯誤其中一種解決辦法

昨天呢,自己更改了一下eclipse的workspace,然後在新建maven工程時     出現Could not calculate build plan錯誤     去網上搜索了很多辦法都沒有奏效,後來終於找到問題所在  &

js更新dom後頁面及時渲染問題js執行緒阻塞和解決辦法

參考:https://blog.csdn.net/qq_39542027/article/details/78893873 兩個概念:1,js是同步載入的                   &nb

URL請求中文、符號“亂碼解碼、轉碼解決方式

有的字元在url中傳遞的時候回編碼(可能是自動的)將其符號轉變為%加上ASCII碼;如果在客戶端或者服務端接收到的時候沒有解碼就會出現類似亂碼的問題;其實不然只是沒有進行解碼 附部分編碼規則       十六進位制值 1. +

修改陣列中的變數,無法立馬觸發檢視更新三種解決方案

第一:使用$set. 直接給student賦值操作,雖然可以新增屬性,但是不會觸發檢視更新 mounted () { this.student.age = 24}原因是:受 ES5 的限制,Vue.js 不能檢測到物件屬性的新增或刪除。因為 Vue.js 在初始化例項時將屬性轉為 getter/sette

UML之工具篇Win10無法使用VGAPlayer播放asf格式與VGA課件的解決辦法

      軟體工程學習完之後的專案是UML,在學習這個UML視訊時發現文件裡有兩個檔案,一個是asf格式的,一個是vga格式的,在經過志帥師哥的指導後才曉得原來是要兩個檔案一起開啟看的,但當下載下來VGAPlayer程式後發現我下載的播放器無法使用,然後就從師哥和小夥

windows下啟動nginx閃退---Windows平臺下80埠被System佔用解決辦法

前言: 在專案中用到nginx,啟動時閃退,檢視錯誤日誌,給出的錯誤如下: nginx: [emerg] bind() to 0.0.0.0:80 failed (10013: An attempt was made to access  a socket in a way forb

Android Studio Gradle sync failed: Connection timed out: connect 解決辦法

             因為更新Android Studio到最新版,我採用下載最新版重新安裝的方式,遇到最大的問題就是Gradle sync failed: Connection timed out: connect ,在網上嘗試了各種辦法都得不到解決,這裡記錄下大佬教我

HTML5中sublime Text3的常用外掛的安裝及使用PyV8安裝不成功的解決辦法

Sublime3下載 1.百度搜索Sublime3,選擇進入下載頁面   2.小編選擇下載Win64位安裝程式 二、Sublime3安裝 傻瓜式安裝,此處省略千言萬語,然後開啟就可以使用了,大家要注意的一點是,Sublime3是收費軟體,最傻的是,如果使用者