[C#][ASP.NET MVC5] FileUpload 上傳檔案大小的限制

ASP.NET為防止駭客利用大檔案進行DOS(Denial Of Service)攻擊,所以把上傳檔案大小限制在4096KB(4MB),因此當上傳檔案超過4MB時,就會收到System.Web.HttpException 超出最大的要求長度的錯誤訊息如下:

01

那如果需要上傳超過4MB的檔案怎麼辦?那就必須修改Web.configsystem.web讓該站自訂大小,修改內容如下:

  • maxRequestLength 檔案大小(KB)
  • executionTimeout 上傳時間(秒)

修改完後雖然不會跳出上面的錯誤了,不過卻跳出另外一個訊息:
04

拜了Google才發現,原來 Windows Server 2008 (IIS 7.0) 上又多了一個 maxAllowedContentLength 屬性 (單位為 Byte),於是乎又打開了Web.config找到system.webServer,修改內容如下:

其預設值為 30000000 Bytes (~28.6 MB),所以上傳 30 MB 的檔案就會產生錯誤了。這邊我是修改為1 GB (1024 x 1024 x 1024)可視情況調整。


綜合以上的修改結果為:

02

 

如果使用者上傳超過設定的最大上限怎麼辦?是不是又會跳出錯誤訊息?不要害怕,只要在Global.asax裡面處理這項錯誤即可,處理方式如下:

03

 

結論:

一個簡單的上傳功能,想不到有這麼多眉眉角角需要注意,做這行真是不容易QQ

 

參考:

  1. ASP.NET如何設定檔案上傳大小可超過預設4096KB(4MB)
  2. FileUpload 上傳檔案大小的限制

[C#][ASP.NET MVC5] 使用 HttpPostedFileBase 檔案上傳

檔案上傳功能在網頁中常常出現,在ASP.NET MVC裡面要上傳檔案非常簡單,這裡簡單筆記一下有關 ASP.NET MVC 的檔案上傳基本操作方法。

  • Controller
  • View

    這邊要注意的是,如需要使用HttpPostedFileBase上傳檔案的話,則必須添加enctype = "multipart/form-data",不然怎麼樣都沒辦法正常收到資料!
    另外如果使用下列語法是無法接收資料的,因這樣表單並沒有含enctype = "multipart/form-data"這項

    一定要用改為下面的方法

 

範例程式:https://github.com/shuangrain/WebApplication_Upload

[C#] 檢查資料夾是否存在,如不存在則新增資料夾

在儲存檔案的時候,常常會需要動態新增資料夾,但如果沒有特別處理的話,資料夾無法正常建立,所以需要用到下面的語法來檢查該資料夾是否存在,如不存在則新增。

P.S. 寫入檔案除了要注意資料夾路徑是否存在以外,還要注意該應用程式的權限問題唷!

[C#][ASP.NET MVC5] 使用Ajax.BeginForm時無法正常運作

在ASP.NET MVC裡面,表單提交方法有兩種,一種是傳統的Html.BeginForm另外一種是利用JQuery實現的Ajax.BeginForm,平常我都是使用Html.BeginForm在處理表單,最近在寫上傳檔案功能的時候想玩Ajax.BeginForm看看,於是乎發生了Ajax無法正常運作的問題,拜了Google大神很久發現了原因是Visual Studio新建專案的時候沒有幫我加入Microsoft jQuery Unobtrusive Ajax這個套件,多虧這個原因讓我撞牆撞了好久,最後裝上去才解決問題。

解決步驟如下:

  1. 對著專案點選右鍵選擇管理NuGet套件
    01
  2. 搜尋unobtrusive找到Microsoft.jQuery.Unobtrusive.Ajax選擇安裝
    02
  3. /App_Start/BundleConfig.cs裡面新增套件
    03
  4. 在要使用的頁面加入以下語法使用

WordPress 新增媒體後顯示 500 – 內部伺服器錯誤

在Windwes Server 2012 R2下安裝Wordpress還滿多東西需要設定的,像是上傳新照片的時候會出現500 - 內部伺服器錯誤

Wordpress 新增媒體後顯示 500 - 內部伺服器錯誤 - 01Wordpress 新增媒體後顯示 500 - 內部伺服器錯誤 - 02

這個問題非常讓人頭痛,詢問了Google小姐一陣子後找到了解答是說,由於IIS沒有權限讀取暫存資料夾C:\Windows\Temp,明明沒有權限讀取此資料夾為什麼又要上傳到這裡呢?難道沒有自己的一個專屬暫存資料夾嗎?
不過既然知道了問題點,解決起來就不是甚麼問題了。

解決方法:

  1. 找到路徑C:\Windows\Temp,編輯IIS_IUSRS使用者,給予該使用者讀取的權限即可。
    Wordpress 新增媒體後顯示 500 - 內部伺服器錯誤 - 03
  2. 這樣就可以正常顯示圖片囉!
    Wordpress 新增媒體後顯示 500 - 內部伺服器錯誤 - 04

IIS 網站強制使用 https 加密連線

在這篇 IIS 使用 Let’s Encrypt 的 SSL 免費憑證 – 多站台申請 提到了免費SSL憑證申請,現在我們要申請完後要限制每個網站都只能用https瀏覽的話,就必須用web.config來將使用者自動轉移到https的網址上,廢話不多說教學如下。

  • 在要移轉的網域資料夾下新增檔案web.config,內容如下:

新增完畢後無須重啟立即生效,現在輸入http網址看看會不會轉跳到https吧!

IIS 使用 Let’s Encrypt 的 SSL 免費憑證 – 多站台申請

先前有教大家使用 IIS 使用 Let’s Encrypt 的 SSL 免費憑證 ,不知道各位有沒有發現到若多站台都要申請免費SSL的時候,會發生申請一個憑證另一個站台就會掛掉的問題,現在來教大家怎麼用一個憑證涵蓋全部的站台囉!

這邊可以省略新增web.config的動作,因為程式會自動幫你新增唷!

  1. 對著解壓縮後的資料夾按著Shift+右鍵選擇在此處開啟命令視窗(W)
    圖一
  2. 輸入指令(Help)

    IIS 使用 Let’s Encrypt 的 SSL 免費憑證 - 多站台申請 - 01
  3. 輸入S產生一個用於複數站台的憑證
    IIS 使用 Let’s Encrypt 的 SSL 免費憑證 - 多站台申請 - 02
  4. 輸入你想要新增的站台編號,範例為:1,2,3,4,5
    IIS 使用 Let’s Encrypt 的 SSL 免費憑證 - 多站台申請 - 03
  5. 完成!

延伸閱讀:IIS 網站強制使用 https 加密連線

[WordPress插件] WP Slug Translate 網址自動轉換英文

每次新增文章都會看到中文網址,轉成UTF8編碼的時候就會變成一長串無法閱讀的字串,也會有很多其他問題,所以我去找了個插件讓中文自動轉換為英文,解決這個問題。
插件名稱:WP Slug Translate
設定:

  1. 首先到這裡,訂閱等等要使用的翻譯功能,每個月有200萬次的額度,對於正常使用是非常足夠的。
  2. 接著到這裡,註冊應用程式。
    02
  3. 將剛剛的用戶端識別碼用戶端密碼,依序貼到插件的設定裡面後儲存變更。
    記得將下面的語言修改為zh-CHT唷!這樣才能正常翻譯繁體中文
    01
  4. 撰寫文章時網址還是顯示中文。
    03
  5. 發表後就會自動轉中文囉!
    04

Selinux 安全性設定造成php-mysql無法正常連線

今天在測試Google Cloud SQL的時候,明明權限設定沒有問題,但不知為何在我CentOS上面就是無法執行mysql_connect函式,搞了幾個小時,發現又是Selinux安全性在搞鬼,找到問題來源自然好解決。

  1. 取得 selinux 和httpd有關的參數

    未命名
  2. 把他打開就可以了

[C#] 使用 Google Maps Geocoding API 將地址轉換為經緯度

本來是使用Google Map JavaScript API的google.maps.Geocoder,但發現Google似乎有對查詢間隔做限制,Code常常一下可以一下又不行,找了很久終於找到了不錯的C#解決方案,而且似乎沒有任何限制唷!

如果回傳格式想要是Json的話把requestUri的xml改成json就好囉!

來源:How to call Google Geocoding service from C# code