2014-04-17 20 views
1

我需要使用經典的asp和vbscript保存圖像並在標題中獲取錯誤消息。ADODB.Stream - 參數屬於錯誤類型,超出了可接受的範圍,或者彼此衝突

我用Base64 Encode String in VBScriptConvert 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)插入和更新記錄,並且正常工作。

我也有該文件夾的寫權限。

關於尋找什麼的任何想法?

+0

做一個MsgBox VARTYPE(圖象 - )和MSGBOX IsArray的(圖象 - )的msgbox則IsDate(圖象 - )的msgbox的IsEmpty(圖象 - )MSGBOX ISNULL (imagedata)msgbox IsNumeric(imagedata)msgbox IsObject(imagedata),也用於imagebinarydata –

+0

你在混淆你的編碼,如果你想發送一個'Base64'中的圖像,但是在[tag:asp-classic]末端,你想解碼它而不是再次編碼,它已經是'Base64'你想要的是一個二進制流(這就是爲什麼'ADODB.Stream'抱怨參數是錯誤的類型)。使用'Base64Decode()'而不是'Base64Encode()'應該給你你需要的東西。 – Lankymart

+0

我已經添加了一個應該更好解釋的答案。 – Lankymart

回答

0

問題是,您正在將圖像數據編碼爲Base64兩次,這會破壞它,而不是將其從Base64解碼爲ADODB.Stream可以解釋的二進制流。


現在你的過程是;

Base64 String - >Encode to Base64 String - >Build Stream from Base64 String - >Save Stream to File


的過程應該是;

Base64 String - >Decode to Binary Stream - >Save Stream to File


嘗試在SaveFile()變更此線;

imagebinarydata = Base64Encode(imageData) 

to;

imagebinarydata = Base64Decode(imageData) 

假設你當然從您提供的鏈接Base64Decode()功能。如果不是,你想要這個;

Function Base64Decode(ByVal vCode) 
    Dim oXML, oNode 

    Set oXML = CreateObject("Msxml2.DOMDocument.3.0") 
    Set oNode = oXML.CreateElement("base64") 
    oNode.dataType = "bin.base64" 
    oNode.text = vCode 
    Base64Decode = Stream_BinaryToString(oNode.nodeTypedValue) 
    Set oNode = Nothing 
    Set oXML = Nothing 
End Function 

鏈接

+0

我已經按照建議更改了代碼,我可以保存該文件。當我嘗試打開這個文件時,它說它已經損壞了。圖像大約10kb,因此它不是空的。 – Sonja

+0

@Sonja您能否在原始問題中發佈更新的代碼? – Lankymart