我需要使用經典的asp和vbscript保存圖像並在標題中獲取錯誤消息。ADODB.Stream - 參數屬於錯誤類型,超出了可接受的範圍,或者彼此衝突
我用Base64 Encode String in VBScript和Convert hex string (image) to base64 (for browser rendering) in VBScript作爲參考點,但沒有運氣。
我的過程如下。我有一個HTML 5畫布,並使用jQuery我將圖像保存到一個隱藏的領域。
HTML:
<input type="hidden" id="imageData" name="imageData">
的jquery:
var image = document.getElementById("canvas").toDataURL("image/png");
image = image.replace('data:image/png;base64,', '');
$('#imageData').val(image);
我收到的數據和予已刪除了image.replace( '數據:圖像/ PNG; BASE64,', '')部如果這是問題。
我的VBScript代碼如下:
Function SaveFile(imageData)
dim fs,f,mappedpath,filename, userid, fullpathandfilename, imagebinarydata, oStream
userid = 12
filename = Month(now())&"_"&Day(now())&"_"&Year(now())&"_"&Minute(now())&"_"&Second(now())&".png"
mappedpath = Server.MapPath("images/")
fullpathandfilename = mappedpath + "\" + filename
Const adTypeBinary = 1
Const adSaveCreateOverWrite = 2
Set oStream = Server.CreateObject("ADODB.Stream")
oStream.type = adTypeBinary
oStream.open
imagebinarydata = Base64Encode(imageData)
oStream.write imagebinarydata
'Use this form to overwrite a file if it already exists
oStream.savetofile fullpathandfilename, adSaveCreateOverWrite
oStream.close
set oStream = nothing
response.write("success")
End Function
Function Base64Encode(sText)
Dim oXML, oNode
Set oXML = CreateObject("Msxml2.DOMDocument.3.0")
Set oNode = oXML.CreateElement("base64")
oNode.dataType = "bin.base64"
oNode.nodeTypedValue =Stream_StringToBinary(sText)
Base64Encode = oNode.text
Set oNode = Nothing
Set oXML = Nothing
End Function
'Stream_StringToBinary Function
'2003 Antonin Foller, http://www.motobit.com
'Text - string parameter To convert To binary data
Function Stream_StringToBinary(Text)
Const adTypeText = 2
Const adTypeBinary = 1
'Create Stream object
Dim BinaryStream 'As New Stream
Set BinaryStream = CreateObject("ADODB.Stream")
'Specify stream type - we want To save text/string data.
BinaryStream.Type = adTypeText
'Specify charset For the source text (unicode) data.
BinaryStream.CharSet = "us-ascii"
'Open the stream And write text/string data To the object
BinaryStream.Open
BinaryStream.WriteText Text
'Change stream type To binary
BinaryStream.Position = 0
BinaryStream.Type = adTypeBinary
'Ignore first two bytes - sign of
BinaryStream.Position = 0
'Open the stream And get binary data from the object
Stream_StringToBinary = BinaryStream.Read
Set BinaryStream = Nothing
End Function
我甚至嘗試轉換,而不XML DOM對象,但它不斷在下面的行突破:
oStream.write imagebinarydata
帶有錯誤消息:
ADODB.Stream錯誤'800a0bb9'參數是錯誤的類型,超出可接受範圍,或相互衝突。
要使用ADODB.Stream,我必須安裝任何額外的東西嗎?
該應用程序還有其他部分(傳統的asp和使用vbscript)插入和更新記錄,並且正常工作。
我也有該文件夾的寫權限。
關於尋找什麼的任何想法?
做一個MsgBox VARTYPE(圖象 - )和MSGBOX IsArray的(圖象 - )的msgbox則IsDate(圖象 - )的msgbox的IsEmpty(圖象 - )MSGBOX ISNULL (imagedata)msgbox IsNumeric(imagedata)msgbox IsObject(imagedata),也用於imagebinarydata –
你在混淆你的編碼,如果你想發送一個'Base64'中的圖像,但是在[tag:asp-classic]末端,你想解碼它而不是再次編碼,它已經是'Base64'你想要的是一個二進制流(這就是爲什麼'ADODB.Stream'抱怨參數是錯誤的類型)。使用'Base64Decode()'而不是'Base64Encode()'應該給你你需要的東西。 – Lankymart
我已經添加了一個應該更好解釋的答案。 – Lankymart