Запись бинарных данных с использованием javascript на сервере

Я пытаюсь вывести 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 без предварительной записи в файл.


person alumb    schedule 11.11.2009    source источник


Ответы (2)


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

Response.Write(this.buffer)

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

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

person AnthonyWJones    schedule 11.11.2009
comment
Не могли бы вы быть более четкими в отношении того, что вы собираетесь убить свой сервер? Я попробовал метод Response.write, но он создал поврежденные PDF-файлы. Я подозреваю, что это связано с тем, как изображения кодируются и выводятся в виде текста. Могу поспорить, что Response.write выполняет какую-то кодировку, которая повреждает данные изображения, когда они записываются в выходной буфер. - person alumb; 12.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>
person alumb    schedule 11.11.2009