2009-11-01 130 views
1

我正在嘗試上傳文件。在此之前,我需要在保存到指定文件夾之前檢查文件類型和大小。 我需要允許用戶只上傳.jpg,.bmp,.swf,.png,.tiff, 沒有其他類似.txt,pdf,.doc和需要檢查文件大小總是小於1 MB。我們可以這樣做的JavaScript或C#編碼在上傳之前檢查文件類型(.txt,jpg等)和大小

2:和保存文件之前,我需要檢查是否有任何文件中的文件夾中有相同的名稱,如果它存在比阿爾雷用戶告訴文件名退出 並應重命名文件

在這個任何解決方案將是巨大的
謝謝

回答

2

至於檢查的文件大小和之前上傳的擴展,你需要使用某種形式的客戶端的控制這樣的。我會推薦類似http://swfupload.org/

至於檢查服務器之前是否存在相同的文件名,您需要使用來自此組件的預上載事件之一,以便對服務器進行ajax調用以驗證這種情況。

0

您只能在將文件發送到C#中的服務器後檢查文件名和大小。可以使用FileName屬性檢查名稱。要獲取文件的擴展名,您可以編寫Path.GetExtension(upload.FileName)。請注意,文件擴展名爲jpg的事實並不意味着它實際上是一個JPEG圖像。

要檢查文件是否已經存在,寫File.Exists(Path.Combine(@"Your folder", upload.FileName))

爲了讓大小的字節數,檢查upload.PostedFile.ContentLength

+0

向下投票:很明顯,大小是可用的在表單處理程序中的PostedFile.ContentLength。將文件保存到服務器後進行檢查計劃很愚蠢 – 2011-09-13 03:02:16

+0

@Andrew:我試圖說你不能用Javascript來做。 – SLaks 2011-09-13 13:18:12

0

您可以在MSDN上找到正確的方法。

這裏有一個快速片段,檢查文件類型:

if (bannerImageUpload.HasFile) 
{ 
    if (bannerFileExt == ".jpg") 
    { 
     Stream bannerFileStream = bannerImageUpload.PostedFile.InputStream; 
     bannerFileData = new byte[bannerImageUpload.PostedFile.ContentLength]; 
     bannerFileStream.Read(bannerFileData, 0, 
      bannerImageUpload.PostedFile.ContentLength); 
    } 
} 

它可能更容易使用的RegularExpressionValidator做這個客戶端上。請注意使用ContentLength屬性。使用File.Exists檢查目錄文件夾與任何現有的同名文件由SLaks :-)

1

解釋您可以使用正則表達式來檢查文件類型

<asp:RegularExpressionValidator ID="rexpImageE" Display="Dynamic" runat="server" 
ControlToValidate="fup1" ErrorMessage="Only .gif, .jpg, .jpeg, .png, .tiff" 
ValidationExpression="(.*\.([Gg][Ii][Ff])|.*\.([Jj][Pp][Gg])|.*\.([Bb][Mm][Pp])|.*\.([pP][nN][gG])|.*\.([tT][iI][iI][fF])$)"></asp:RegularExpressionValidator> 

,您可以在服務器上檢查文件大小方如

if (fup1.PostedFile.ContentLength > lengthInBytes) 
    { 
     //your message 
     return; 
    } 
相關問題