Написать двоичные данные, используя JavaScript на сервере - PullRequest
3 голосов
/ 11 ноября 2009

Я пытаюсь вывести PDF, используя серверный JavaScript (ASP). Текущий метод, который я использую:

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 ]

1 голос
/ 11 ноября 2009

Почему бы просто не использовать: -

Response.Write(this.buffer)

При условии, что кодовая страница ответа установлена ​​правильно (т. Е. Она такая же, как в локали, в которой выполняется VBScript), тогда Response.Write должен выполнить то же преобразование, что и ваш StringToMultiByte.

Я подозреваю, что вы попробовали это, но это не сработало. Если это так, я действительно думаю, что вам нужно выяснить, почему это скорее попытка такого странного использования BinaryWrite. В настоящее время ваше решение убьет ваш сервер.

0 голосов
/ 11 ноября 2009

Моим решением было использовать 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>
...