在服务器上使用javascript写二进制数据

时间:2009-11-11 00:27:50

标签: asp-classic jscript

我正在尝试使用服务器端javascript(ASP)输出PDF。我正在使用的当前方法是:

xfile=Server.MapPath(lib.fso.GetTempName())
xf=lib.fopen(xfile,"wb");
lib.fwrite(xf,this.buffer);
lib.fclose(xf);
outB = Server.CreateObject("ADODB.Stream")
outB.Type = 1
outB.Open()
outB.LoadFromFile (xfile)
Response.BinaryWrite(outB.Read())
outB.Close()
lib.fso.DeleteFile(xfile);

这样可行,但需要在服务器上进行写访问。有没有办法在不写文件的情况下做同样的事情?

我无法弄清楚如何将字符串this.buffer转换为array of byte然后我可以使用Response.BinaryWrite编写而无需先写入文件。

2 个答案:

答案 0 :(得分:1)

为什么不简单地使用: -

Response.Write(this.buffer)

假设响应的代码页设置正确(即,它与运行VBScript的Locale中的相同),那么Response.Write应该执行与StringToMultiByte相同的转换。

我怀疑你已经尝试了这个并且没有奏效。如果是这样,我真的认为你需要调查为什么这是尝试BinaryWrite的这种奇怪用法。目前,您的解决方案将杀死您的服务器。

答案 1 :(得分:0)

我的解决方案是使用VBScript。

将以上代码替换为:

Response.BinaryWrite(StringToMultiByte(this.buffer));

并将其添加到文件末尾:

<script language="vbscript" runat="server">

function StringToMultiByte(S)
   Dim i, MultiByte
   For i=1 To Len(S)
   MultiByte = MultiByte & ChrB(Asc(Mid(S,i,1)))
   Next
   StringToMultiByte = MultiByte
End function

</script>