我有一個MVC3應用程序,從用戶的硬盤上傳文件並對其進行操作。一個要求是文件擴展名應該是.xls(或xlsx)。在ASP.NET MVC3與C#中的遠程文件擴展名驗證?
我想驗證文件名,但我想知道什麼是重用和性能方面的最佳選擇(當然,最好的編碼實踐)。
我有以下索引視圖:
@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<br />
<p><input type="file" id="file" name="file" size="23"/></p><br />
<p><input type="submit" value="Upload file" /></p>
}
由控制器操作方法調用指數:
public ActionResult Index()
{
return View("Index");
}
而且用戶響應由指數操作方法處理(HttpPost):
[HttpPost]
public ActionResult Index(HttpPostedFileBase file)
{
FileServices lfileServices = new FileServices();
var lfilePath = lfileServices.UploadFile(file, "~/App_Data/uploads");
//Manipulation;
}
現在我可以在FileServices中使用Path.GetExtension(filename)
來獲取擴展名,然後執行檢查,但是它會在上傳完成後立即執行。
我想這樣做,一旦用戶嘗試上傳文件。唯一出現在我腦海的是創建一個Model(或更好的ViewModel)並使用遠程驗證從DataAnnotations。
我看到了Scott Hanselman的一次演示,但似乎他並不真正舒適,因爲應用程序正在編譯,但沒有執行檢查。
有沒有人爲了執行這樣的遠程驗證或任何其他解決方案(例如jQuery)的好方法?
感謝
弗朗西斯
@Darin季米特洛夫:謝謝您的回答。你怎麼看待調用動作方法而不是在jQuery中執行檢查? – CiccioMiami 2011-04-29 10:57:43
@Francesco,我沒有看到需要。如果這個動作所能做的只是驗證擴展名,這可以在客戶端完成。爲什麼浪費帶寬? – 2011-04-29 11:07:09
@Darin Dimitrov:例如,如果您概括了大小寫,並且您希望在具有不同文件類型的其他應用程序中重用該功能。 – CiccioMiami 2011-04-29 11:22:21