ADODB.Stream ReadText错误

时间:2014-06-24 21:19:46

标签: asp-classic

我使用下载的纯ASP脚本上传文件。我的表单包含textarea和文件上传组件。当我输入常规文本时它工作正常,但是当我从具有特殊字符的单词复制和粘贴时,它无法处理。我得到的错误是:

提供商错误' 80070057'

参数不正确。

/forum/freeaspupload.asp,第309行

我抛出错误的代码部分是:

Private Function ConvertUtf8BytesToString(start, length)    
    StreamRequest.Position = 0

    Dim objStream
    Dim strTmp

    ' init stream
    Set objStream = Server.CreateObject("ADODB.Stream")
    objStream.Charset = "utf-8"
    objStream.Mode = adModeReadWrite
    objStream.Type = adTypeBinary
    objStream.Open

    ' write bytes into stream
    StreamRequest.Position = start+1
    StreamRequest.CopyTo objStream, length
    objStream.Flush

    ' rewind stream and read text
    objStream.Position = 0
    objStream.Type = adTypeText
    strTmp = objStream.ReadText

    ' close up and return
    objStream.Close
    Set objStream = Nothing
    ConvertUtf8BytesToString = strTmp   
End Function

第309行是行:

strTmp = objStream.ReadText

知道怎么解决吗?

1 个答案:

答案 0 :(得分:4)

我知道这是一个老问题,但由于没有答案,我得到了完全相同的问题,最后找到了解决方案,我认为分享它可能会很好。

问题与IIS版本有关,因为它在IIS6上工作正常但在我们迁移到IIS8.5时停止工作

请参阅ReadText

通过defaut ReadText参数为-1(adReadAll)。

由于某种原因,此默认参数似乎不适用于IIS8.5。您必须输入要阅读的文本的长度。

所以ReadText(2000)会正常工作。

当然,您必须找出最大长度或找到循环和阅读所有内容的方法

通过MSFT:

  

如果NumChar超过流中剩余的字符数,则只返回剩余的字符数。字符串读取未填充以匹配NumChar指定的长度。如果没有要读取的字符,则返回值为null的变量。 ReadText不能用于向后阅读。