Iis 在VB脚本CDO.Message中将二进制/base64数据设置为附件

Iis 在VB脚本CDO.Message中将二进制/base64数据设置为附件,iis,vbscript,asp-classic,cdo.message,Iis,Vbscript,Asp Classic,Cdo.message,我正试图发送一封带有PDF格式附件的电子邮件。我有二进制/Base64格式的附件数据,但当我试图将其写入流时,它不起作用。这是我的密码。我在这里使用上传类- 有人能帮忙吗?最后,我终于把它修好了。感谢您指出vbArray+vbByte的问题。上传的数据是多字节数据,我需要对其进行规范化 这是我用来转换多字节数组的函数 Function GetFileDataBinary() Dim RS, LMultiByte, Binary Const adLongVarBinary = 2

我正试图发送一封带有PDF格式附件的电子邮件。我有二进制/Base64格式的附件数据,但当我试图将其写入流时,它不起作用。这是我的密码。我在这里使用上传类-


有人能帮忙吗?

最后,我终于把它修好了。感谢您指出
vbArray+vbByte
的问题。上传的数据是多字节数据,我需要对其进行规范化

这是我用来转换多字节数组的函数

Function GetFileDataBinary()

    Dim RS, LMultiByte, Binary
    Const adLongVarBinary = 205
    Set RS = CreateObject("ADODB.Recordset")
    LMultiByte = LenB(FileData)
    If LMultiByte > 0 Then
        RS.Fields.Append "mBinary", adLongVarBinary, LMultiByte
        RS.Open
        RS.AddNew
        RS("mBinary").AppendChunk FileData & ChrB(0)
        RS.Update
        Binary = RS("mBinary").GetChunk(LMultiByte)
    End If

    GetFileDataBinary = Binary
End Function
我改变了我的代码,如下所示,它工作得很顺利

Dim uploadFileName
Dim uploadFileData
' Check if any files were uploaded
If Uploader.Files.Count > 0 Then
    ' Loop through the uploaded files
    For Each File In Uploader.Files.Items
        uploadFileName = File.FileName
        uploadFileData = File.GetFileDataBinary
    Next
End If

我可以调用
File.GetFileDataBinary
,因为我将我的
GetFileDataBinary
放在我的
upload.asp

oStreamOut.Write base64
可以显示填充base64的代码吗?你是否尝试更改oStreamOut.Type=0你的意思是你有一个base64编码的文件,你想将它附加到电子邮件中。这里的问题是二进制编码为base64,这
ADODB.Stream
将无法理解。首先,您需要解码base64以返回原始二进制。但是,如果您已经有了附件数据,那么您的代码就没有意义了。为什么需要将其流式输出?此时代码向后看。@GELR
StreamTypeEnum
adTypeBinary=1
adTypeText=2
没有
0
。由于您使用
元数据导入了类型信息
,因此需要删除声明
Const cdoContentDisposition
,否则,您将得到一个运行时错误
名称重新定义
。然后,您需要确保
varType(uploadFileData)=vbArray+vbByte
,因为错误
参数的类型错误、超出了可接受的范围或彼此冲突。
表示您传递了一个类型意外的参数。因为您的流是二进制的,所以您需要传递一个字节数组,但是
uploadFileData
显然不是。
Function GetFileDataBinary()

    Dim RS, LMultiByte, Binary
    Const adLongVarBinary = 205
    Set RS = CreateObject("ADODB.Recordset")
    LMultiByte = LenB(FileData)
    If LMultiByte > 0 Then
        RS.Fields.Append "mBinary", adLongVarBinary, LMultiByte
        RS.Open
        RS.AddNew
        RS("mBinary").AppendChunk FileData & ChrB(0)
        RS.Update
        Binary = RS("mBinary").GetChunk(LMultiByte)
    End If

    GetFileDataBinary = Binary
End Function
Dim uploadFileName
Dim uploadFileData
' Check if any files were uploaded
If Uploader.Files.Count > 0 Then
    ' Loop through the uploaded files
    For Each File In Uploader.Files.Items
        uploadFileName = File.FileName
        uploadFileData = File.GetFileDataBinary
    Next
End If