2016-02-23 25 views
1

我在數據庫中的圖像作爲dataurl:的base64二進制輸出到瀏覽器

data:image/png;base64,iVBORw0KGgoAA... 

我要輸出的圖像文件瀏覽器

r=split(rs("image"),";") 
s=split(r(1),",") 
imgdata=base64decode(s(1)) 
Response.Contenttype="image/png" 
response.binarywrite(imgdata) 

得到的文件是兩倍len(imgdata)的大小;這個轉儲顯示,我首先想到它只填充8位到16位。

0000000 2030 0050 004e 0047 000d 000a 001a 000a 
0000010 0000 0000 0000 000d 0049 0048 0044 0052 
0000020 0000 0000 0001 0063 0000 0000 0001 00fe 
0000030 0008 0006 0000 0000 0000 0049 003a 006f 
0000040 007c 0000 0000 0020 0000 0049 0044 0041 

但生成的文件在另一個地方:

0000210 2014 004b 2022 00eb 203a 007e 0178 00ee 
0000220 00da 00dd 00a5 007b 0178 00af 017e 00a3 
0000230 003a 0066 00f6 00bd 007a 00e5 0053 00cf 

有與高字節組單詞。

這是一個代碼頁問題嗎?

如果我從磁盤讀取文件並對其進行二進制編碼,則圖像無問題。

+0

如果傳統的ASP應用程序在IIS7或IIS8運行...創建ac#dll並將其暴露給com會更容易,然後使用Convert.FromBase64。我爲整個文本命名空間做了這個,我甚至有一個StringBuilder的COM暴露,我可以調用經典的ASP。例如。的Server.CreateObject( 「XYZ.Text.StringBuilder」)。它的工作原理是,經典的asp可以在集成模式下運行,而.Net CLR已經在這些服務器上運行,自2008年起,r2隨3.5發佈,sp 1爲4.5.2,windows 2012隨附4.5。 –

+0

謝謝,但我在下面的答案中的4行很容易,爲我工作。 –

+0

是的,只是可能不是效率最高或表現最好的方式,如果它後來導致問題或速度很慢,請重新訪問com + dll的想法,這很容易,而且非常快。 –

回答

1

我換成這個base64decode:

Set objXML = Server.CreateObject("MSXml2.DOMDocument") 
Set objDocElem = objXML.createElement("Base64Data") 
objDocElem.DataType = "bin.base64" 
objDocElem.text = s(1) 'the base64-encoded string 
imgdata=objDocElem.NodeTypedValue 

現在得到的圖像是正確的,解碼速度快100倍(這feals)