ASP文件扩展名拆分

时间:2012-05-18 21:38:46

标签: file-upload asp-classic

我有以下代码:

Public Sub Save(path)
    Dim streamFile, fileItem, filePath, allowedExtensions
    allowedExtensions = ".jpg, .gif, .png, .zip, .7z, .exe, .bmp, .pdf, .doc, .docx"

    if Right(path, 1) <> "\" then path = path & "\" '"

    if not uploadedYet then Upload

    For Each fileItem In UploadedFiles.Items        
        Dim MyArray, extension

        MyArray = Split(fileItem, ".")
        extension = MyArray(UBound(MyArray)-1)

        '' # var extension = UCase(right(fileItem.FileName,5,);

        if(allowedExtensions.Contains(extension)) then  
            filePath = path & fileItem.FileName
            Set streamFile = Server.CreateObject("ADODB.Stream")
            streamFile.Type = adTypeBinary
            streamFile.Open
            StreamRequest.Position=fileItem.Start
            StreamRequest.CopyTo streamFile, fileItem.Length
            streamFile.SaveToFile filePath, adSaveCreateOverWrite
            streamFile.close
            Set streamFile = Nothing
            fileItem.Path = filePath
        end if
     Next
End Sub

我似乎无法理解这一行:

MyArray = Split(fileItem, ".")

浏览器告诉我:

  

Microsoft VBScript运行时错误“800a01b6”

     

Object不支持此属性或方法

     

/up/freeaspupload.asp,第90行

我向上看,它表明你就是这样做的。

任何人都有任何想法我做错了什么或解决这个问题?

我只想允许上传某些扩展程序。

2 个答案:

答案 0 :(得分:4)

在VBScript中,原始类型没有内置方法。因此, allowedExtensions 不能使用Contains方法。我想这就是错误发生的原因。第MyArray = Split(fileItem, ".")行正确且清晰。

  

if(allowedExtensions.Contains(extension))then

您可以使用InStr搜索其他字词。

'For case insensitive search
If InStr(1, BeingSearched, SearchedFor, vbTextCompare) Then
    'Contains
End If

答案 1 :(得分:2)

Kul-Tigin发现了你的代码的另一个问题,一旦你遇到了这个问题实际上存在的Split问题,你就会崩溃。你的Split函数失败的原因我怀疑它应该是这样的:

 MyArray = Split(fileItem.FileName, ".")

请注意,您应该传递FileName对象的fileItem属性的值。 fileItem似乎没有指定默认属性。