ADODB.Stream ReadText 错误

问题描述 投票:0回答:2

我正在使用下载的纯 ASP 脚本来上传文件。我的表单包含一个文本区域和一个文件上传组件。当我输入常规文本时它工作正常,但当我从具有特殊字符的单词中复制并粘贴某些内容时它无法处理。我收到的错误是:

提供商错误“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

知道如何解决吗?

asp-classic
2个回答
6
投票

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

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

参见阅读文本

默认 ReadText 参数为 -1 (adReadAll)。

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

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

当然,您必须计算出最大长度或找到一种循环并读取所有内容的方法

微软金融时报:

如果 NumChar 大于流中剩余的字符数,则仅返回剩余的字符。读取的字符串不会被填充以匹配 NumChar 指定的长度。如果没有剩余字符可供读取,则返回值为 null 的变体。 ReadText 不能用于向后阅读。


0
投票

我得到了我的数据。我只写两次“ReadText”:)

strData = objStream.ReadText(1) // return first char
strData = strData & objStream.ReadText(-1) // returm full text
© www.soinside.com 2019 - 2024. All rights reserved.