サーバー上でJavaScriptを使用してバイナリデータを書きます

StackOverflow https://stackoverflow.com/questions/1712211

  •  19-09-2019
  •  | 
  •  

質問

私は、サーバー側の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

私のソリューションは、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>

他のヒント

なぜ単純には使用しない: -

Response.Write(this.buffer)

応答のコードページが正しく設定されていると仮定すると(つまり、ロケールのように、その同じことのVBScriptが実行されている)、その後のResponse.Writeは、あなたのStringToMultiByteがやっているのと同じ変換を行う必要があります。

私はあなたがこれを試したし、仕事をしていませんが疑われます。もしそうなら、私は本当にあなたがそれがむしろのBinaryWriteのこの奇妙な使い方をしようとしている理由を検討する必要があると思います。現在、あなたのソリューションは、サーバーを殺すつもりされます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top