2016-11-01 9 views
0

ユーザーが選択したファイルに対してフィルタリングを行っています。私が現在ボタンアップロードのクリックイベントに使用しているコードです。ファイルフィルタリング(ASP.Net、VB.Net)

Dim validFileTypes As String() = {"jpg", "JPG", "jpeg", "JPEG", "png", "PNG"} 
Dim ext As String = Path.GetExtension(fileUpload.PostedFile.FileName) 
Dim isValidFile As Boolean = False 

If fileUpload.HasFile Then 
    For i As Integer = 0 To validFileTypes.Length - 1 
     If ext = "." & validFileTypes(i) Then 'if selected url got extension like listed above 
      isValidFile = True 'file is valid 
      Dim hfc As HttpFileCollection = Request.Files 
      For j As Integer = 0 To hfc.Count - 1 
       Dim hpf As HttpPostedFile = hfc(j) 
       If hpf.ContentLength > 0 Then 
        hpf.SaveAs(Server.MapPath("source") & "\" & Path.GetFileName(hpf.FileName)) 
       End If 
      Next 
     Else 
      Alert("Failed to upload! Please select file with valid extension.") 
     End If 
    Next 
Else 
    Alert("Please select image!") 
End If 

したがって、誤った拡張子のファイルを選択した場合、ファイルは一時ファイルにアップロードされません。 validFileTypesは6種類で構成されているため、Alert("Failed to upload! Please select file with valid extension.")は選択したファイルが1であっても6回表示されます。私は修正しようとしましたが、あなたからのガイダンスが必要です。ありがとうございました。

答えて

1

私はあなたのコードを改善し、あなたの欠点をいくつか修正しました。

Dim validExtensions As String() = {"jpg", "JPG", "jpeg", "JPEG", "png", "PNG"} 

' Check if request has no file 
If Request.Files.Count = 0 Then 
    Alert("Please select image!") 
Else 
    'Otherwise get files from request 
    Dim files As HttpFileCollection = Request.Files 
    'Loop through file names 
    For Each fileName as String In files.AllKeys 
     'Get file from posted files 
     Dim file As HttpPostedFile = files(fileName) 
     'Check content length of file 
     If file.ContentLength > 0 Then 
      'Get file extension of file 
      Dim extension As String = Path.GetExtension(file.FileName) 
      'Check if file extension is valid 
      If validFileTypes.Contains(extension) Then 
       'Save file 
       file.SaveAs(Server.MapPath("source") & "\" & Path.GetFileName(file.FileName)) 
      Else 
       Alert("Failed to upload! Please select file with valid extension.") 
       Exit For 'Break loop 
      End If 
     End If 
    Next 
End If 
+0

ご回答いただきありがとうございます。私はそれを感謝します。私はあなたのコーディングを試みたが、私はこのエラーが発生しました**タイプ 'System.String'のオブジェクトを 'System.Web.HttpPostedFile'にタイプできません。** 'For EachファイルFor HttpPostedFile In files'ファイル – Emerald

+0

あなたのコーディングは素晴らしいですが、複数の画像を選択すると、1つの画像しかチェックして保存しません。 2つの画像を選択すると2回ループしますが、ループ全体で1つの画像と同じ画像しかチェックしません。 – Emerald

+0

実際には、無効なファイルが見つかるまですべての有効なファイルを保存します。次に、有効な拡張子を持つ残りのファイルを選択し、フォームを再度送信する必要があります。あなたのコーディングの欠点は、最初に投稿されたファイルだけを検証することによるもので、実際には無効な拡張子を持つファイルを保存する可能性があります。 –

関連する問題