Java 處理中文名稱檔案下載的處理、驗證碼生成
阿新 • • 發佈:2019-01-03
建立DownLoadServlet,備份使用
import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import sun.misc.BASE64Encoder; public class DownLoadServlet2 extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //*******檔名稱是中文的下載******* //獲得要下載的檔案的名稱 String filename = request.getParameter("filename");//????.jpg //解決獲得中文引數的亂碼----下節課講 filename = new String(filename.getBytes("ISO8859-1"),"UTF-8");//美女.jpg //獲得請求頭中的User-Agent String agent = request.getHeader("User-Agent"); //根據不同瀏覽器進行不同的編碼 String filenameEncoder = ""; if (agent.contains("MSIE")) { // IE瀏覽器 filenameEncoder = URLEncoder.encode(filename, "utf-8"); filenameEncoder = filenameEncoder.replace("+", " "); } else if (agent.contains("Firefox")) { // 火狐瀏覽器 BASE64Encoder base64Encoder = new BASE64Encoder(); filenameEncoder = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?="; } else { // 其它瀏覽器 filenameEncoder = URLEncoder.encode(filename, "utf-8"); } //要下載的這個檔案的型別-----客戶端通過檔案的MIME型別去區分型別 response.setContentType(this.getServletContext().getMimeType(filename)); //告訴客戶端該檔案不是直接解析 而是以附件形式開啟(下載)----filename="+filename 客戶端預設對名字進行解碼 response.setHeader("Content-Disposition", "attachment;filename="+filenameEncoder); //獲取檔案的絕對路徑 String path = this.getServletContext().getRealPath("download/"+filename); //獲得該檔案的輸入流 InputStream in = new FileInputStream(path); //獲得輸出流---通過response獲得的輸出流 用於向客戶端寫內容 ServletOutputStream out = response.getOutputStream(); //檔案拷貝的模板程式碼 int len = 0; byte[] buffer = new byte[1024]; while((len=in.read(buffer))>0){ out.write(buffer, 0, len); } in.close(); //out.close(); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
————————————–分割線—————————————-
生成程式碼CheckImgServlet
import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 驗證碼生成程式 * * * */ public class CheckImgServlet extends HttpServlet { // 集合中儲存所有成語 private List<String> words = new ArrayList<String>(); @Override public void init() throws ServletException { // 初始化階段,讀取new_words.txt // web工程中讀取 檔案,必須使用絕對磁碟路徑 String path = getServletContext().getRealPath("/WEB-INF/new_words.txt"); try { BufferedReader reader = new BufferedReader(new FileReader(path)); String line; while ((line = reader.readLine()) != null) { words.add(line); } reader.close(); } catch (IOException e) { e.printStackTrace(); } } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 禁止快取 // response.setHeader("Cache-Control", "no-cache"); // response.setHeader("Pragma", "no-cache"); // response.setDateHeader("Expires", -1); int width = 120; int height = 30; // 步驟一 繪製一張記憶體中圖片 BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 步驟二 圖片繪製背景顏色 ---通過繪圖物件 Graphics graphics = bufferedImage.getGraphics();// 得到畫圖物件 --- 畫筆 // 繪製任何圖形之前 都必須指定一個顏色 graphics.setColor(getRandColor(200, 250)); graphics.fillRect(0, 0, width, height); // 步驟三 繪製邊框 graphics.setColor(Color.WHITE); graphics.drawRect(0, 0, width - 1, height - 1); // 步驟四 四個隨機數字 Graphics2D graphics2d = (Graphics2D) graphics; // 設定輸出字型 graphics2d.setFont(new Font("宋體", Font.BOLD, 18)); Random random = new Random();// 生成隨機數 int index = random.nextInt(words.size()); String word = words.get(index);// 獲得成語 // 定義x座標 int x = 10; for (int i = 0; i < word.length(); i++) { // 隨機顏色 graphics2d.setColor(new Color(20 + random.nextInt(110), 20 + random .nextInt(110), 20 + random.nextInt(110))); // 旋轉 -30 --- 30度 int jiaodu = random.nextInt(60) - 30; // 換算弧度 double theta = jiaodu * Math.PI / 180; // 獲得字母數字 char c = word.charAt(i); // 將c 輸出到圖片 graphics2d.rotate(theta, x, 20); graphics2d.drawString(String.valueOf(c), x, 20); graphics2d.rotate(-theta, x, 20); x += 30; } // 將驗證碼內容儲存session request.getSession().setAttribute("checkcode_session", word); // 步驟五 繪製干擾線 graphics.setColor(getRandColor(160, 200)); int x1; int x2; int y1; int y2; for (int i = 0; i < 30; i++) { x1 = random.nextInt(width); x2 = random.nextInt(12); y1 = random.nextInt(height); y2 = random.nextInt(12); graphics.drawLine(x1, y1, x1 + x2, x2 + y2); } // 將上面圖片輸出到瀏覽器 ImageIO graphics.dispose();// 釋放資源 //將圖片寫到response.getOutputStream()中 ImageIO.write(bufferedImage, "jpg", response.getOutputStream()); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } /** * 取其某一範圍的color * * @param fc * int 範圍引數1 * @param bc * int 範圍引數2 * @return Color */ private Color getRandColor(int fc, int bc) { // 取其隨機顏色 Random random = new Random(); if (fc > 255) { fc = 255; } if (bc > 255) { bc = 255; } int r = fc + random.nextInt(bc - fc); int g = fc + random.nextInt(bc - fc); int b = fc + random.nextInt(bc - fc); return new Color(r, g, b); } }
準備的驗證碼上的文字new_words.txt
一唱一和 一呼百應 一乾二淨 一舉兩得 一落千丈 一模一樣 一暴十寒 一日千里 一五一十 一心一意 兩面三刀 三長兩短 三番五次 三三兩兩 三頭六臂 三心二意 三言兩語 四分五裂 四面八方 四通八達 四平八穩 五光十色 五湖四海 五花八門 五顏六色 六神無主 七顛八倒 七零八落 七拼八湊 七上八下 七手八腳 七嘴八舌 八面玲瓏 九死一生 十全十美 百發百中 百孔千瘡 百戰百勝 百依百順 千變萬化 千差萬別 千軍萬馬 千山萬水 千絲萬縷 千辛萬苦 千言萬語 千真萬確 千錘百煉 千方百計 千奇百怪 千姿百態 千鈞一髮 千慮一得 千慮一失 千篇一律 萬水千山 萬無一失 萬眾一心 萬紫千紅 萬死一生 推心置腹 肝膽相照 情同手足 志同道合 風雨同舟 榮辱與共 同甘共苦 關懷備註 心心相印 海誓山盟 拔刀相助 親密無間 萬紫千紅 春暖花開 鳥語花香 奼紫嫣紅 花紅柳綠 百花爭豔 錦上添花 火樹銀花 昨日黃花 春花秋月 過時黃花 花團錦簇 花枝招展 崇山峻嶺 山明水秀 山窮水盡 大好山河 刀山火海 地動山搖 高山深澗 懸崖峭壁 峰巒雄偉 漫山遍野 江山如畫 錦繡山河 五彩繽紛 五顏六色 一碧千里 萬紫千紅 花紅柳綠 翠色慾流 奼紫嫣紅 五光十色 青紅皁白 綠水青山 不可多得 鳳毛麟角 九牛一毛 絕無僅有 空前絕後 寥寥無幾 寥若晨星 寧缺毋濫 前所未有 屈指可數 三三兩兩 鐵樹開花 微乎其微 一麟半爪 一絲一毫 百裡挑一 滄海一粟 千古絕唱 摩肩接踵 車水馬龍 川流不息 紛至沓來 花花世界 舉袖為雲 揮汗如雨 絡繹不絕 門庭若市 萬人空巷 水洩不通 人聲鼎沸 人歡馬叫 人山人海 震耳欲聾 座無虛席 包羅永珍 琳琅滿目 美不勝收 目不暇接 無奇不有 無窮無盡 無所不包 五花八門 眼花繚亂 洋洋大觀 一應俱全 應有盡有 應接不暇 比比皆是 不可計數 層出不窮 綽綽有餘 多多益善 多如牛毛 俯拾皆市 舉不勝舉 漫山遍野 星羅棋佈 豐富多彩 九霄雲外 騰雲駕霧 壯志凌雲 風雲變幻 風起雲湧 行雲流水 風捲殘雲 浮雲蔽日 孤雲野鶴 烘雲托月 過眼雲煙 煙消雲散 大雨傾盆 血雨腥風 風雨交加 風調雨順 槍林彈雨 風雨同舟 風雨無阻 和風細雨 狂風暴雨 滿城風雨 滂沱大雨 春風化雨 風雨飄搖 斜風細雨 未雨綢繆 水流湍急 水平如鏡 高山流水 千山萬水 水滴石穿 水乳交融 滴水不漏 杯水車薪 洪水猛獸 流水無情 直言不諱 無所顧忌 拐彎抹角 真心誠意 故弄玄虛 侃侃而談 滔滔不絕 虛情假意 推心置腹 旁敲側擊 喋喋不休 慢條斯理 含糊其詞 嘮嘮叨叨 振振有辭 肆無忌憚 大言不慚 娓娓動聽 繪聲繪色 對答如流 自圓其說 閒言碎語 閉月羞花 沉魚落雁 出水芙蓉 明眸皓齒 美如冠玉 傾國傾城 國色天香 鶴髮童顏 眉清目秀 和藹可親 心慈面善 張牙舞爪 愁眉苦臉 冰清玉潔 雍容華貴 文質彬彬 威風凜凜 老態龍鍾 虎背熊腰 如花似玉 容光煥發 落落大方 骨瘦如柴 大腹便便 面黃肌瘦 其貌不揚 蓬頭垢面 弱不禁風 口若懸河 對答如流 滔滔不絕 談笑風生 高談闊論 豪言壯語 誇誇其談 花言巧語 忐忑不安 心驚肉跳 心神不定 心猿意馬 心慌意亂 七上八下 心急如焚 班門弄斧 孤芳自賞 居功自傲 目中無人 妄自尊大 忘乎所以 惟我獨尊 自高自大 自鳴得意 自我陶醉 自命不凡 目空一切 不驕不躁 功成不居 戒驕戒躁 洗耳恭聽 虛懷若谷 慎言謹行 學無止境 學而不厭 真才實學 學而不倦 發奮圖強 廢寢忘食 爭分奪秒 孜孜不倦 笨鳥先飛 聞雞起舞 自強不息 只爭朝夕 不甘示弱 全力以赴 力爭上游 披荊斬棘 奮不顧身 捨己為人 堅強不屈 赤膽忠心 不屈不撓 忠貞不渝 誓死不二 威武不屈 捨死忘生 肝膽相照 克己奉公 一絲不苟 兩袖清風 見禮忘義 永垂不朽 頂天立地 豁達大度 兢兢業業 賣國求榮 恬不知恥 貪生怕死 厚顏無恥 神采奕奕 眉飛色舞 昂首挺胸 驚慌失措 漫不經心 垂頭喪氣 沒精打采 愁眉苦臉 大驚失色 炯炯有神 怒髮衝冠 一目十行 一日千里 一字千金 百發百中 一日三秋 不毛之地 不計其數 膽大包天 寸步難行 一步登天 千鈞一髮 觀者如雲 揮金如土 鐵證如山 愛財如命 穩如泰山 門庭若市 骨瘦如柴 冷若冰霜 如雷貫耳 守口如瓶 浩如煙海 高手如林 陽春三月 春光明媚 春回大地 春暖花開 春意盎然 春意正濃 風和日麗 春花爛漫 鳥語花香 百鳥鳴春 百花齊放 鶯歌燕舞 赤日炎炎 烈日炎炎 驕陽似火 揮汗如雨 大汗淋漓 鳥語蟬鳴 萬木蔥蘢 枝繁葉茂 蓮葉滿池 秋高氣爽 天高雲淡 秋風送爽 秋菊怒放 秋菊傲骨 秋色迷人 秋色宜人 金桂飄香 果實累累 北雁南飛 滿山紅葉 五穀豐登 蘆花飄揚 天寒地凍 北風呼嘯 滴水成冰 寒冬臘月 瑞雪紛飛 冰天雪地 冰封雪蓋 漫天飛雪 白雪皚皚 冰封大地 冰天雪地 東方欲曉 旭日東昇 萬物初醒 空氣清醒 雄雞報曉 晨霧瀰漫 晨光絢麗 烈日當頭 麗日臨空 豔陽高照 萬里無雲 碧空如洗 日落西山 夕陽西斜 殘陽如血 炊煙四起 百鳥歸林 華燈初上 夜幕低垂 日薄西山 夜深人靜 月明星稀 夜色柔美 夜色迷人 深更半夜 漫漫長夜 風光秀麗 人山人海 車水馬龍 寧靜和諧 草木蒼翠 竹籬瓦舍 山幽路闢 小橋流水 直指青雲 古色古香 青磚素瓦 聳入碧雲 機器轟鳴 鐵流直瀉 熱氣騰騰 鋼花飛濺 粉飾一新 門可羅雀 冷冷清清 錯落有致 富麗堂皇 設施齊全 氣勢雄偉 金碧輝煌 風景如畫 聞名遐邇 井然有序 雜亂無章 佈局巧妙 錯落有致 寬闊平坦 崎嶇不平 擁擠不堪 暢通無阻 花紅柳綠 花色迷人 花香醉人 花枝招展 百花齊放 百花盛開 百花爭豔 絢麗多彩 五彩繽紛 奼紫嫣紅 綠草如茵 一碧千里 雜草叢生 生機勃勃 蒼翠挺拔 鬱鬱蔥蔥 枯木逢春 秀麗多姿 青翠欲滴 林海雪原 聳入雲天 瓜果蔬菜 清香鮮嫩 青翠欲滴 果園飄香 果實累累 果實飽滿 鮮嫩水靈 象徵和平 乳燕初飛 婉轉悅耳 鶯歌燕舞 翩然歸來 枝頭嬉戲 灰不溜秋 嘰嘰喳喳 鸚鵡學舌 婉轉悅耳 笨嘴學舌 利嘴如鐵 鋼爪如釘 神氣活現 昂首挺胸 肥大豐滿 自由自在 引吭高歌 騰空而起 狂奔飛馳 膘肥體壯 昂首嘶鳴 瘦骨嶙峋 行動遲緩 俯首帖耳 膘肥體壯 川流不息 呼嘯而過 穿梭往來 緩緩駛離 一葉扁舟 揚帆遠航 乘風破浪 霧海夜航 追波逐浪 劃破雲層 直衝雲霄 穿雲而過 銀鷹展翅 學習用品 美觀實用 小巧玲瓏 造型優美 設計獨特 栩栩如生 活潑可愛 惹人喜愛 愛不釋手 雨後彩虹 彩橋橫空 若隱若現 光芒萬丈 大雪紛飛 大雪封山 鵝毛大雪 漫天飛雪 瑞雪紛飛 林海雪原 風雪交加 雪上加霜 寒霜襲人 霜林盡染 垂露欲滴 朝露晶瑩 日出露幹 電光石火 雷電大作 驚天動地 春雷滾滾 電劈石擊 雷電交加 陰雨連綿 牛毛細雨 秋雨連綿 隨風飄灑 傾盆大雨 狂風暴雨 大雨滂沱 瓢潑大雨 大雨淋漓 暴雨如注 秋風送爽 金風送爽 北風呼嘯 微風習習 寒風刺骨 風和日麗 大霧迷途 雲霧茫茫 霧似輕紗 風吹霧散 雲消霧散 彩雲滿天 天高雲淡 烏雲翻滾 彤雲密佈 彩霞繽紛 晚霞如火 朝霞燦爛 丹霞似錦 滿天星斗 眾星捧月 群星燦爛 萬點繁星 月出東牆 月出東山 玉兔東昇 月光皎潔 月色迷人 月牙初升 旭日東昇 日上三竿 一輪紅日 日高三尺 豔陽高照 烈日當頭 驕陽似火 日影西斜 苦口婆心 口若懸河 心平氣和 不慌不忙 語重心長 熱情洋溢 恭恭敬敬 洗耳恭聽 親密無間 形影不離 情同手足 團結友愛 朝夕相處 人山人海 人聲喧譁 人聲嘈雜 人如潮湧 摩肩接踵 傾盆大雨 狂風暴雨 大雨滂沱 瓢潑大雨 讀書學習 神情專注 學而不厭 學無止境 專心致志 日積月累 似懂非懂 普天同慶 彩旗飛舞 歡天喜地 張燈結綵 徹夜狂歡 興高采烈 手舞足蹈 笨手笨腳 擠眉弄眼