2008-11-18 48 views
3

我在我的數據庫中存儲了一些文件,因爲我以二進制格式存儲它們,並且沒有保存任何其他信息,所以我必須確保它們都在相同的格式,以便我可以稍後「提供」它們(如果有一個簡單的方法來從字節數組推斷文件類型,請告訴,但這不是重點)。驗證在ASP.NET中上傳的文件的ContentType

所以,我需要做的是驗證上傳的每個文件,以確保它是所需的格式。

我已經設置了FieldTemplate一個FileUpload控件和一個的CustomValidator:

<asp:FileUpload ID="FileUpload" runat="server" />&nbsp; 


<asp:CustomValidator 
    ID="CustomValidator1" 
    runat="server" 
    ErrorMessage="PDF only." 
    ControlToValidate="FileUpload" 
    OnServerValidate="CustomValidator1_ServerValidate"> 
</asp:CustomValidator> 

什麼,我缺少的是在檢查上傳的文件,以確保它在CustomValidator1_ServerValidate方法放置代碼正確的格式(在這種情況下是PDF)。

在此先感謝。

回答

4

使用FileUpload.PostedFile.ContentType屬性來驗證MIME類型(應該是application/pdf)。出於安全原因,還要驗證文件擴展名是否合適(.pdf)。你可以有一個靜態哈希表,其中包含從MIME類型到文件擴展名的映射,並用作查找來驗證擴展。

2

FileUpload.PostedFile.ContentType正是我一直在尋找的東西。

只是單單試圖去做同樣的事情:似乎PDF文件的MIME類型可以是「application/pdf」或「text/pdf」,所以一定要檢查兩者。

2

用戶可以欺騙它。上述解決方案沒有驗證實際的字節內容。我可以給你發送可執行文件並將其僞裝成pdf,但這不會理解它。

4

就像ary說的。這都可以被欺騙。取一個.txt文件,將其重命名爲pdf文件並嘗試獲取內容類型。它將是「application \ pdf」。

但是,有一種解決方案,我以前使用過。在對PDF文件進行簡短測試期間,我發現前3個字節總是相同的。我只嘗試了前3個字節,因爲它似乎夠用了。前三個字節的值是:37,80,68。

因此,我讀取字節(InputFile1.FileContent.ReadByte()),將它們與上面的3個字節進行比較,如果它們相同,則我有一個PDF文件。另外,我在某處閱讀應該關閉IIS中上載目錄的腳本執行。希望能幫助到你。

+0

是否有關於此的一些官方文檔? – Farinha 2011-11-17 12:18:06