65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 COM 和 ASP 进行文件上传

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.78/5 (6投票s)

2000 年 8 月 7 日

viewsIcon

227556

downloadIcon

2537

一个简单的 COM 组件,附带源代码,为您的 ASP 页面提供文件上传功能。

  • 下载演示项目 - 32 Kb
  • 引言

    这篇文章是关于通过 COM 组件 (IUploader 接口) 上传文件。它使用 IRequest 接口来检索所需的信息。

    有很多免费和商业解决方案,但我希望用一种简单的方法来创建我的。

    由于在上传文件时您不能使用 request 对象,我创建了方法 GetFormValue 从表单中检索任何变量。 您传递变量名(区分大小写),它会返回找到的值。

    为了完成文件上传并检索任何表单变量,需要从 request 对象中获取整个缓冲区并对其进行解释。 这是这个缓冲区的基本示例

    -----------------------------7d034c2160334
    Content-Disposition: form-data; name="UploadFile"; filename="C:\SampleFile.txt"
    Content-Type: text/plain
    
    Test file...
    
    -----------------------------7d034c2160334
    Content-Disposition: form-data; name="submit1"
    
    Submit
    -----------------------------7d034c2160334
    Content-Disposition: form-data; name="userName"
    
    me
    -----------------------------7d034c2160334-- 
    

    如何使用

    这些是 IUploader 接口的方法

    方法 描述
    StartUpload(IUnknown* pIUnk) 在创建组件后应该调用此方法。 pIUnk 必须是 Request 接口
    SetDestinationPath(BSTR bsPath) 必须调用此方法来定义将保存文件的位置。 如果目录不存在,则会创建该目录
    GetError(long lError, BSTR* pbsReturn) 此方法返回上传失败的错误消息。 lError 是对 UploadFile 的调用的返回值
    SetMaxFileSize(long lSize) 定义要上传的最大文件大小(字节)。 如果 lSize 为 -1,则没有限制
    GetFormValue(BSTR bsFieldName, BSTR* pbsReturn) 获取表单变量的值
    UploadFile(BSTR bsFieldName, long* plResult) 上传文件。 如果 lResult 等于 0,则操作成功
    SetAllowedExtensions(SAFEARRAY(VARIANT) FileExtensions) 指示允许的扩展名。 默认值表示允许所有扩展名
    SetForbiddenExtensions(SAFEARRAY(VARIANT) FileExtensions) 定义禁止的文件扩展名
    GetUploadFilename(BSTR bsField, BSTR* pbsFilename) 返回上传文件的文件名

    以下 VBScript 代码使用我的组件上传文件

    const UploadOK               = 0
    const FilesizeInvalid        = 1
    const ExtensionNotAllowed    = 2
    const DestinationPathInvalid = 3
    const UnknownError           = 4
    const UnableToCreateFile     = 5
    const FileDoesntExist        = 6
    
     
    Set objUploader = Server.CreateObject("InetUtil.Uploader") 
    objUploader.StartUpload(Request)    'passing the IRequest interface for the component
     	
    strUserName = objUploader.GetFormValue("userName")
    objUploader.SetDestinationPath "c:\temp"
    objUploader.SetAllowedExtensions "*"  ' all extensions
    objUploader.SetForbiddenExtensions "exe", "com"
     	
    
    nUploadResult = objUploader.UploadFile("uploadFile")
    

    我本可以使用 ASP 组件,这样我就有 IRequest 接口了。 但过去我遇到了一些问题,这就是我没有使用这种方法的原因。 :o)

    警告: 存在两个已知的内存泄漏,我不知道它们来自哪里。 我认为这与 COleSafeArray 的不良使用有关。 如果您发现了,请提交。

    为了使用演示,您必须拥有 Win 2K 或 NT 机器 (IIS),因为 COM 服务器是进程外的。 要在 Win95/98 机器 (PWS) 中使用它,您应该创建一个新的进程内组件,然后复制实现。

    使用 COM 和 ASP 上传文件 - CodeProject - 代码之家
    © . All rights reserved.