jquery file upload 後台收到的檔案名稱中文亂碼, filename中文亂碼,jqueryfilename

來源:互聯網
上載者:User

jquery file upload 後台收到的檔案名稱中文亂碼, filename中文亂碼,jqueryfilename

本周用jquery file upload做上傳檔案的功能,後台會接受檔案,並且截取檔案名稱作為字元存入資料庫。準系統實現時候,試了幾個檔案,發現如果檔案名稱如果沒有中文就OK,如果檔案名稱帶中文的話,後台收到的就是中文亂碼,怎麼去解碼都沒用。

例如,上傳的檔案叫做“昕銳配置表.xls”,但是到後台收到的卻是 “鏄曢攼閰嶇疆琛?xls” ,如:


似乎也不是解碼能解決的問題。

於是乎想弄清楚這個檔案名稱是在哪個環節出問題的。首先寫了一個最簡單的html頁面,裡面就是最原始的FORM表單,然後提交後台,發現一切正常,檔案名稱是對的,因此大概可以判斷和後台無關,很可能就是jquery file upload這個外掛程式的問題。

於是,用http工具觀察了一下上傳檔案時傳輸的資訊,發現如下問題,主要是POSTDATA部分的Content-Disposition中的filename部分:

原生的FROM提交時,這個filename是正常的:



而用jquery file upload這個外掛程式提交時,這個filename就已經亂了:



於是乎,已經成功地定位了問題產生的環節,就是在jquery file upload這個外掛程式的問題。估計是這個外掛程式的作者沒怎麼考慮字元編碼的問題。

關於javascript的字元編碼問題,好像曾經也接觸過一點,好像是類似於 encodeURI() 或者 encodeURICompent() 這些方法。不過,現在首要的任務是找出jquery.fileupload.js這個檔案中是哪一步設定了 filename 這個參數。

整整兩天,測試來測試去,最終找到了這個地方:這個js中有個成員叫做 _initXHRData, 是一個function, 在這個function的最後部分有一個if-else分支,如下:

if (options.blob) {                        formData.append(paramName, options.blob, file.name);                    } else {                        $.each(options.files, function (index, file) {                            // This check allows the tests to run with                            // dummy objects:                            if (that._isInstanceOf('File', file) ||                                    that._isInstanceOf('Blob', file)) {                                formData.append(                                    ($.type(options.paramName) === 'array' &&                                        options.paramName[index]) || paramName,                                    file,                                    file.uploadName || file.name                                );                            }                        });                    }

實際測試表明,程式會進入else這個分支,並且,else分支中的最後一步,也就是formData.append()這個方法中會對 filename 進行設定,具體的值就是最後一行的

file.uploadName || file.name
很顯然,這裡並沒有對這個檔案名稱做任何編碼處理,發送出去確實容易導致編碼的問題。因此,就在這裡用encodeURI()方法做一下處理:

encodeURI(file.uploadName || file.name)

然後再次測試,這次發送的http資訊中的filename就變成了進行編碼處理過的字串:



然後在後台,用java.net.URLDecoder進行解碼:

fileName = URLDecoder.decode(fileDetail.getFileName(), "UTF-8");
OK,正確輸出:

這個外掛程式導致的中文亂碼問題終於搞定,花了整整4天了!


總結:很多問題看上去完全是無從下手,但仔細想想,其實我們手上有很多實用的工具,我們要做的就是利用好這些工具,抓住每一點蛛絲馬跡,堅信沒有解決不了的技術問題,一步一步進行推導,最終找到問題的根源,並加以解決。

所謂解決不了的技術問題,多半是因為對這些技術以及相關的知識不夠熟悉罷了。只要相關的知識夠豐富,經驗夠多,解決特定的問題會很輕鬆。



jquery uploadfiy多檔案上傳,struts1後台檔案名稱中文亂碼,解決,前台gbk

下面是我開發過程遇到的一些問題總結:
1、上傳失敗 IO ERROR ------測試是否是 servlet 等配置或者關注flash的版本
2、前台傳參中文亂碼 -----------這個要根據應用伺服器不同可能不同吧...反正只要我們的 介面、介面傳參以及後台接收的編碼設定一致應該就沒上面問題..反正這個問題好解決的...
3、批量上傳的時候,只有第一個附件上傳的時候可以接收到前台傳來的name參數,而後面的參數都為null-------設定'simUploadLimit' : 1, // 一次同步上傳的檔案數目為 1,問題解決...當初這個問題可是難了我好久!fuck
來源blog.csdn.net/...091013
 
jquery非同步提交中文亂碼,提交到背景資料正常顯示,但是叫提交到背景資料從新返回到前台,前台中文亂碼

後台和前台的編碼不統一,解決方案是統一編碼,比如都用UTF-8
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.