The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

使用 DotNetZip 解壓縮為 Stream 時讀不到檔案內容的陷阱

我們有個案子,因為會需要製作檔案上傳功能,但商品的圖片很多,除了單張圖片上傳外,也允許讓客戶批次上傳圖片,只要客戶先把大量圖片壓縮成 *.zip 檔案,上傳到我們製作的後台後,就會利用 DotNetZip 套件,將客戶上傳的壓縮檔 ( *.zip ) 解壓縮,並將檔案一一上傳到 Windows Azure 雲端的 儲存體 (Storage) 上。基本上,這功能很簡單,隨便 Google 一下都有得抄 code,同事也很自然的抄了一段 code,測試無誤就放上,誰知道,同一段看似沒問題的 code,在不同的使用情境下,還是會出現 Bug,魔鬼總在細節裡,讓我們繼續斬妖除魔去。

... 繼續閱讀 ...

撰寫合約書金額時建議使用 Word 插入國字大寫數字功能

Word 不知道在哪個版本開始,就有內建插入數字功能,可以方便你快速輸入複雜難寫的國字大寫,尤其是在撰寫合約書的時候更是便利,但卻很多人不知道 Office 有這個功能。之前雖然錄製過影片示範整個操作過程,但時間一久後,自己都忘記分享在哪裡,印象中自己有分享過,但卻在自己部落格怎樣都搜尋不到,呵。本文末有當初錄製的影片,詳細介紹如何透過「插入數字」功能完成輸入,並且也將傳授如何克服 Word 無法新增超過「一百萬」以上國字大寫數字的難題。

... 繼續閱讀 ...

Git 學習筆記 (1):安裝、選項設定、在本地使用 Git 工具

之前常想,Git 這麼複雜的東西,怎麼國外這麼多人在用啊?今天徹底研究了一番之後發現,Git 真的比 SVN 強大太多,只是分散式版控機制確實跟自己以往熟悉的 SVN 或 TFS 差好多,用舊有的思維模式 (Mindset) 學習新技術還真的有點辛苦,今天算是重新打造全新的思維模式,收穫還不少。這篇文章是我 Git 學習筆記的第一篇,寫了十幾個小時,洋洋灑灑的印出來應該也有幾十頁,還覺得很多東西沒講清楚,歡迎各位留言大家一起學習囉! (^_^)

... 繼續閱讀 ...

如何在 Windows 平台安裝與使用 Yeoman 1.0 相關工具

前陣子翻譯了一篇各式 Web 前端開發工具整理的文章,裡面介紹了許多好用的前端工具,其中 Yeoman 就是一個前端工具的組合,幫你統整前端網頁的開發流程 (Workflow),這是一種工作流程的改善,讓你減少重複的手工作業,也讓你更專注在網站的架構與設計上。不過,這些好用的工具大多透過指令的方式運作 (例如: 透過命令提示字元操作),雖然大多工具是跨平台的,但網路上找到的相關教學文章,都是以 Mac 電腦上的操作為主,因為 Mac 為 Unix-like 的作業系統,可以輕易開啟 Shell 環境,使用上相對順利許多,但到了 Windows 總是卡卡的,有時候甚至於還要 Visual Studio 才能安裝 (因為要編譯特定原始碼),今天我就特別寫一篇在 Windows 安裝與使用 Yeoman 的參考指南,幫助大家快速上手這些好用工具。

... 繼續閱讀 ...

如何從 GitHub, Gist, JSBin, CODEPEN 載入 JavaScript 檔案

前幾天一個負責前端的同事遇到一個問題,在實驗一些 JavaScript 函式庫時,發現無法直接從 GitHub 載入 JavaScript 檔案,Google Chrome 的 Console 視窗 (在開發者工具裡) 會出現一段 Refused to execute script from 'https://raw.github.com/moment/moment/develop/min/moment.min.js' because its MIME type ('text/plain') is not executable, and strict MIME type checking is enabled. 的紅字 (紅字代表嚴重錯誤),而導致網頁無法正確執行,這篇文章將分享幾個注意事項,還有從 GitHub, Gist, JSBin, CODEPEN 載入 JavaScript 範例程式或函式庫的使用技巧。

... 繼續閱讀 ...

關於 AngularJS 控制器 (ngController) 的多種宣告方法

初學 AngularJS 的人,寫到 ngController 之後一定會覺得 AngularJS 的 controller 怎麼這麼簡單,只要宣告一個 function 就馬上可以用了,而且 function 裡面的參數還會經由 AngularJS 自動注入物件。例如 $scope$http$window$log、…等等。不過,這種註冊 controller 的方式雖然簡單,卻還是有些缺點,例如這些 function 宣告不能被 最小化 (Minification),否則 function 內的區域變數被改成 a, b, c 之類的,AngularJS 就無法自動注入物件了,因此必須進一步學習更多的宣告方式,藉此解決 相依注入 (Dependency Injection) 的問題!

... 繼續閱讀 ...

The path ‘XXX’ is already mapped in workspace 的解決方法

昨天我的 Visual Studio 2012 突然發生一件離奇的事件,也就是當連接到 TFS Service 的時候,發生了 The path ‘XXX’ is already mapped in workspace 的錯誤訊息,這問題以前曾經發生過,不過只要重新登入登出 Live ID 就能夠解決,但這次卻怎樣都回復不了,而且是所有的專案都連不上了,上網尋找了一下解決方案,最後才知道是 TFS 的 Mapping 狀態亂掉了,必須清空 TFS Mapping 的狀態快取,才能正常使用。

... 繼續閱讀 ...

前端工程研究:HTML/CSS/JavaScript 相容性檢查資源整理

我們公司自從開出前端的職缺並成功找到人才後,就開始積極的切割 前端 / 後端 的工作,期望前後端的分工架構能夠形成,將網站建置的品質持續向上提升。然而,前端的工作並不輕鬆,其中一個很沒效率的工作就是「跨瀏覽器相容性測試」,經常擊倒不少人,因此打算整理一些不錯的相關資源,如果各位有任何推薦的相關資源,歡迎隨時留言給我,我隨時加上,感恩。

... 繼續閱讀 ...

前端工程研究:關於 JavaScript 中物件的 valueOf 方法

在 JavaScript 程式語言裡,這個 valueOf() 函式算是非常少用的一個內建函式,甚至於很多人連聽都沒聽過。然而,這個 valueOf() 函式十分重要,我在研究之後發現,理解了 valueOf() 的用途後,不但更能理解 JavaScript 如何針對物件進行數值布林字串運算,更能夠利用 valueOf() 解決 使用者定義物件 無法比對大小的問題。

... 繼續閱讀 ...

Linux 的 /tmp 目錄變成 1MB 的 overflow 檔案系統如何解決

今天有台 Linux 系統的硬碟滿了,導致系統發生異常,將空間清出之後,大部分的程式都可以正常運作,但是一個用 PHP 寫的網站卻出了點小問題,所有功能都能運作,MySQL 資料庫也能跑,但只要上傳超過 1MB 的檔案卻怎樣也上傳不成功 (UPLOAD_ERR_CANT_WRITE),查了好久才終於發現,原來是系統的 /tmp 暫存目錄只剩下 1MB 而已,而且檔案系統為沒聽過的 overflow 這個名稱,這篇文章用來解釋這個檔案系統的由來,以及解決方法。

... 繼續閱讀 ...

介紹好用工具:JS Bin ( 網站前端工程師的學習利器 )

我好像很久沒有介紹好用工具了,並不是我偷懶不玩工具,而是最近介紹工具的資訊大多分享在 Will 保哥的技術交流中心 為主,不知道的人記得過去按「」喔。今天這篇文章,主要介紹 JS Bin 這套好用的網頁前端工具,我覺得 JS Bin 介面非常簡潔,非常對我的胃口,雖然此工具還在不斷發展,但是目前的品質已經非常好了,因此覺得可以發表一篇文章來介紹這套工具,並分享一些不容易發現的使用技巧!

... 繼續閱讀 ...

ASP.NET MVC 4 在 .NET 4.0 與 .NET 4.5 的專案範本差異

昨天在【ASP.NET MVC 4 開發實戰】課程中,學員們發現了一個問題,就是在實作與測試 ASP.NET MVC 的 Routing (路由) 機制的過程中,發現有個功能有些人做得出來,有些人卻做不出來,當我前去查看時也沒立即發現問題癥結,中午休息的空檔終於找到的這個細微的差異之處,所以還是寫篇文章提醒正準備開始使用 .NET Framework 4.5 的 ASP.NET MVC 開發人員。

... 繼續閱讀 ...

ASP.NET MVC 開發心得分享 (24):擴充部分類別的建構子

在 ASP.NET MVC 使用 Entity Framework 資料庫先行開發模式 (Database-First Development) 的時候,因為所有 POCO (Plain Old CLR Object) 類別都會透過 *.tt 程式碼產生器範本自動建立,當我們想擴充資料模型時,勢必不會直接把驗證屬性直接寫在這些類別裡,而是在另一個部分類別檔案中,透過 MetadataType 屬性 (Attribute) 宣告一個 Metadata 類別 (又稱 Buddy Class)。另一方面,我們也會在資料模型的 POCO 類別的「建構子」方法中宣告屬性的預設值,但這時問題來了,如果我們在自動產生的資料模型類別中,已經宣告過「建構子」的話,那我們該如何在另一個部分類別檔案中再次「宣告」建構子呢?這就是這篇文章想要解決的難題。

... 繼續閱讀 ...